Solr术语多样性查询

时间:2014-04-11 13:38:26

标签: solr

我试图根据某个词在结果中出现的次数来对我的文档进行评分。

用例如下:

假设我有一个包含数千个对象的索引,每个对象都有一个名为color的字段。如果我想查找所有对象并返回20行的子集,我该如何提升文档以便根据颜色字段项对结果进行均匀划分?

因此,如果索引包含1000个文档,其中字段颜色的术语被划分为:

  • 红色:100个文件
  • blue:200个文件
  • 黄色:300个文件
  • 绿色:400个文件

我如何(在查询这些文件的情况下)确保颜色均匀分布,以便(在20行的情况下)我得到具有以下术语的文件:

  • red:5个文件
  • 蓝色:5个文件
  • 黄色:5个文件
  • 绿色:5个文件

我尝试均匀地推广这样的术语:

(color:red^4 color:blue^4 color:yellow^4 color:green^4)

但那不起作用(得分仍然不同)除此之外,在真实场景中,我并未意识到这些条款。我想知道是否有一个简单的解决方案,我正在查看FunctionQuery,但我不知道这是否有助于解决我的问题


我不知道以下内容是否更容易。而不是根据术语平均分配结果集,我想保持"流行度"这个词。所以在这种情况下(再次提交20个文件)我想要检索:

  • 红色:2份文件(100/1000 * 20)
  • 蓝色:4份文件(200/1000 * 20)
  • 黄色:6份文件(300/1000 * 20)
  • 绿色:8个文件(400/1000 * 20)

1 个答案:

答案 0 :(得分:2)

最佳解决方案可能是分组功能。

如果您在请求中设置了这些参数:

group=true&group.field=color&group.limit=5

Solr会将结果分组为颜色。通过设置group.limit,您可以决定每组需要多少结果。有关详细信息,请查看this链接。

我不确定这对你的用例是否足够,但我希望它有所帮助。