文件的特定顺序Solr(或ES)

时间:2015-04-24 08:57:05

标签: java sql solr elasticsearch

好的,我的工作是在类别页面上创建一个包含Solr结果的特定订单,这在我看来很难实现。

工作:

  • 类别页面的前2个产品必须是精选或大多数点击。
  • 其他产品必须按时间顺序排列,但每个供应商最多只能有2个产品彼此相邻。

所以:

 1. tv from LG (fixt)
 2. radio from Pioneer (fixt)
 3. pc monitor from Samsung (chronologic)
 4. smartphone from Samsung (chronologic)
 5. smartphone from LG (chronologic)
 6. dj set from Pioneer (chronologic)

因此,每个供应商最多可以有2个产品彼此相邻。类别页面可以包含10个三星产品,但不能彼此相邻。只剩下其他供应商没有剩下的产品,那么可以在类别末尾将它们放在一起。所以:

1. samsung product
2. samsung product
3. lg product
4. hp product
5. hp product
6. samsung product
7. hp product
8. hp product
9. hp product
10. hp product
11. hp product
12. hp product
13. hp product

如你所见。如果所有供应商产品都已完成且只剩下一个(hp),则只显示所有这些产品。

我能够使用复杂的SQL函数为主页创建它,每个类别只显示10个产品。但是现在他们想要在整个类别页面上看到相同的顺序,这些页面包含来自Solr的结果....所以有人知道或者可以使用Solr OR ElasticSearch创建这样的订单吗?

我们刚刚开始实施Solr,所以如果有必要使用ElasticSearch也是可行的。

编辑: 我读过这应该可以通过一些JAVA编程来实现:http://sujitpal.blogspot.nl/2013/03/solr-custom-ranking-with-function.htmlhttp://www.supermind.org/blog/756/how-to-write-a-custom-solr-functionquery以前有人做过这个吗?一件事:我不想“提升”文件,我真的希望最多2个供应商彼此相邻,所以这是一个真正具体的订单。任何知道这一点的人都应该可以吗?

1 个答案:

答案 0 :(得分:0)

排序或评分是按文档进行的,而不是在全局范围内,所以我不认为你可以使用相同的方法实现这一目标。

然而,您可以使用top_hits来实现类似的功能,并且它可以正常工作。

{
  "query": {},
  "aggs": {
    "perSupplier": {
      "terms": {
        "field": "supplier"
      },
      "aggs": {
        "TwoDocs": {
          "top_hits": {
            "size": 2
          }
        }
      }
    }
  }
}