Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在一个solr查询中动态提升和限制结果_Java_Sorting_Solr_Lucene_Elevation - Fatal编程技术网

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

Java 在一个solr查询中动态提升和限制结果,java,sorting,solr,lucene,elevation,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"&

我不知道如何制定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>

1.
33
10
2.
44
20
3.
55
30
4.
22
50
5.
11
5.
6.
1.
4.
我的目标是选择一款销量最好的产品,并将其作为第一款产品展示。然后选择一个价格最低的产品,将其显示为第二个,最后按价格升序对其余文档进行排序,因此我的最终结果如下所示:

<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>

3.
6.
5.
4.
1.
2.
在beggining时,我考虑使用组件,但它只支持静态数据,并且我需要能够更改价格范围并应用相同的排序逻辑

我开始考虑,尤其是“max(sales,0)desc”可以解决我的问题,但我找不到一种方法来限制排序结果并将它们合并在一起

也许我正试图通过一个查询来实现一些不可能的事情,但在我决定放弃之前,我想问一下,如果你们有想法,如何解决这个问题

我也发现了这一点,但没有详细介绍解决方案


提前谢谢

您可能会对这张票感兴趣:

[它]增加了通过两个节点传入elevateId和excludeId的功能 新的http参数“elevateId”和“excludeId”。这将允许 在选择要访问的ID时使用更复杂的业务逻辑 提升/排除


老实说,我不会指望索尔来做这件事。我会得到我的结果集,然后自己拿出两个特例。或者单独查询它们。您可能可以编写自定义排序功能来在Solr中工作,但这将比它的价值大得多。这是我的另一个选择。查询必须提升的文档并在应用程序级别合并结果。太糟糕了,solr不能完全做到这一点。您使用的是solr的哪个版本?来自solr dashboard“4.6.1 156866-mark-2014-01-23 20:21:50”,因此它相对新鲜。我们目前正在使用多个查询来实现这一点,非常感兴趣的是如何在一个查询中完成它。谢谢@Simon,这看起来确实很有趣,因为您可以将结果的合并直接移动到Solr,而不是在应用程序级别进行。它仍然不能解决使用一个查询获得结果的问题。