【问题标题】:Solr term diversity querySolr 术语多样性查询
【发布时间】:2014-04-11 13:38:25
【问题描述】:

我正在尝试根据某个术语在结果中出现的次数对我的文档进行评分。

用例如下:

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

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

  • 红色:100 个文档
  • 蓝色:200 个文档
  • 黄色:300 个文档
  • 绿色:400 个文档

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

  • 红色: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)

【问题讨论】:

    标签: solr


    【解决方案1】:

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

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

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

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

    我不确定这是否足以满足您的用例,但希望对您有所帮助。

    【讨论】:

    • 嗯,这里的主要问题是我不知道有多少颜色会匹配查询(所以我不知道如何划分它)。所以我假设我可能必须触发 2 个查询,一个用于计数,一个用于正确分组。
    • 更新:我们决定使用这种方法,但首先启动了一个查询来检索每种颜色的构面计数并根据它计算组限制。所以我接受了你的回答。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-19
    • 2012-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多