java - 在一个 solr 查询中动态提升和限制结果

标签 java sorting solr lucene elevation

我在弄清楚如何制定 solr 查询来动态提升某些文档并对其余文档应用不同的排序机制时遇到问题。为了使它更清楚,请考虑以下文档。

<doc>
  <field name="docId">1</field>
  <field name="sales">33</field>
  <field name="price">10</field>
</doc>
<doc>
  <field name="docId">2</field>
  <field name="sales">44</field>
  <field name="price">20</field>
</doc>
<doc>
  <field name="docId">3</field>
  <field name="sales">55</field>
  <field name="price">30</field>
</doc>
<doc>
  <field name="docId">4</field>
  <field name="sales">22</field>
  <field name="price">50</field>
</doc>
<doc>
  <field name="docId">5</field>
  <field name="sales">11</field>
  <field name="price">5</field>
</doc>
<doc>
  <field name="docId">6</field>
  <field name="sales">1</field>
  <field name="price">4</field>
</doc>

我的目标是选择销量最好的产品并将其显示为第一个产品。然后选择价格最低的产品并将其显示为第二个,最后按价格升序对其余文档进行排序,所以我的最终结果如下所示:

<doc>
  <field name="docId">3</field><!-- Product with the highest amount of sales -->
</doc>
<doc>
  <field name="docId">6</field><!-- Product with the lowest price -->
</doc>
<!-- The rest sorted by price asc -->
<doc>
  <field name="docId">5</field>
</doc>
<doc>
  <field name="docId">4</field>
</doc>
<doc>
  <field name="docId">1</field>
</doc>
<doc>
  <field name="docId">2</field>
</doc>

一开始我正在考虑使用 QueryElevation组件,但它只支持静态数据,我需要能够更改价格范围并应用相同的排序逻辑。

我开始查看 solr function query特别是“max(sales,0) desc”可以解决我的问题,但我找不到一种方法来限制排序结果并将它们合并在一起。

也许我正在尝试实现仅用一个查询根本不可能实现的目标,但在我决定放弃之前,我想问一下,如果你们有想法,如何解决这个问题?

我还发现了这个answer但没有详细介绍解决方案。

提前致谢!

最佳答案

您可能会对这张票感兴趣:https://issues.apache.org/jira/browse/SOLR-5541

[It] adds the ability to pass in elevateIds and excludeIds through two new http parameters "elevateIds" and "excludeIds". This will allow more sophisticated business logic to be used in selecting which ids to elevate/exclude.

关于java - 在一个 solr 查询中动态提升和限制结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22204461/

相关文章:

java - 安装 Solr PHP JAVA_HOME 错误

java - 反序列化后如何自动执行方法?

Python:对依赖列表进行排序

arrays - Perl:在哈希数组中找到最大值和最小值

performance - 索引大小对搜索速度的影响(存储或不存储)

mysql - solr 中的多值字段仅返回一项

java - RxJava 中的指数退避

java - 出现错误 - org.openqa.selenium.StaleElementReferenceException : stale element reference: element is not attached to the page document

java - ibm狂想曲汇编

Python:类型错误: 'NoneType' 对象不可下标