【问题标题】:How to find if a document is a good match for a query, e.g., normalize elasticsearch score?如何查找文档是否与查询匹配,例如标准化弹性搜索分数?
【发布时间】:2019-05-31 06:41:23
【问题描述】:

Elasticsearch 计算的分数提供了文档之间的排名,但它不能说明文档是否与请求匹配。目前,第一个文档可以匹配所有字段,也可以只匹配一个。分数提供的唯一信息是它是最佳匹配。

是否可以获得关于查询的标准化分数?例如,1 分表示文档与查询完全匹配,0.1 分表示文档匹配不佳。

【问题讨论】:

  • 谁能告诉我为什么这个问题被否决了?我看了this question的内容,找不到原因。

标签: elasticsearch


【解决方案1】:

简而言之,不,不可能为查询获得真正的归一化分数,但可以获得在许多情况下都有效的足够好的分数归一化。

获得分数以判断文档是否适合查询的问题是找到最适合该查询的文档,从而获得最大分数。使用 elasticsearch 和大多数(如果不是全部)指标,最高分数是没有界限的。

即使使用简单的匹配查询,从技术上讲,您也可以通过无限次重复查询词的文档获得无限分。没有对分数的限制,就不可能得到真正的归一化分数。

但所有的希望都没有落空。您可以针对应该获得最高分数的虚假理想文档进行标准化,而不是针对可能的最佳分数进行标准化。例如,如果您使用查询词Jane DoeCook 查询两个字段nameoccupation,那么您的理想文档可以是

{
    "name": "Jane Doe",
    "occupation": "Cook"
}

如果索引包含名称为 Jane Jane Doe 的文档,则理想文档可能无法获得最高分。如果查询的字段相对较短,您可能不必担心术语重复。如果您有包含许多术语的字段,您可能会决定复制一些在理想文档中经常出现的术语。如果目标是确定文档是否匹配良好,则文档得分高于理想文档通常不是问题。

好消息是,如果您至少使用 elasticsearch 6.4,则不必为虚假文档编制索引来获取其查询分数。您可以使用端点_scripts/painless/_execute获取理想文档的分数。

GET _scripts/painless/_execute
{
    "script": {
        "source": "_score"
    },
    "context": "score",
    "context_setup": {
        "index": <INDEX>,
        "document": <THE_IDEAL_DOCUMENT>,
        "query": <YOUR_QUERY>
    }
}

请注意,计算分数时会考虑虚假文档的字段统计信息,例如包含字段的文档数和包含查询词的字段数。如果您有很多文档,这应该不是问题,但是对于非常不常见的字段或术语(例如低于 20),您会注意到与以前索引的文档相比,理想文档的得分较低。

【讨论】:

  • 我对这个案子很感兴趣。它如何与文本字段/搜索一起使用?当我在无痛脚本中输入相同的查询时,我在标准查询中的得分为 0.78,超过 200..
  • 使用脚本似乎不再起作用了。计算分数时不考虑字段统计数据,这就是为什么你有不同的分数。我为其他解决方案写了this article。如果您有兴趣使用 elasticsearch 插件进行相对评分,请告诉我您使用的 elasticsearch 版本,以便我更新插件。
  • 感谢您的分享。我曾想过将类似的东西与并行索引一起使用,并将查询索引为此处的文档,但我担心它会与我的统计索引混淆,并且索引上的删除似乎不像你提到的那样有效。您的插件似乎正是我想要的,但我使用的是 ES 7.9.1。让我知道我是否可以帮助维护/更新,即使我是 java 菜鸟 :)
  • 您好,我已经发布了 es 7.9.1 的插件版本 :) 但是,保持插件的兼容性并不是很容易(即使是在较小的版本更改时也会中断......)。可悲的是,我不建议将此插件用于弹性搜索定期更新的生产应用程序,除非您可以花一些时间来更新它。如果您有兴趣,我会很高兴为维护这个项目提供一些帮助:)
  • 非常感谢您发布新版本。好的,我了解 ES 快速移动环境的问题。我会尽快尝试该插件,并让您知道它是否适合我。我很确定它会在很多用例中有所帮助:)
猜你喜欢
  • 1970-01-01
  • 2020-11-09
  • 2020-11-10
  • 2016-01-01
  • 2014-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多