当前位置: 首页 > 面试题库 >

如何查找文档是否适合查询,例如规范化elasticsearch得分?

璩正志
2023-03-14
问题内容

Elasticsearch计算出的分数提供了文档之间的排名,但是无法判断文档是否与请求匹配。当前,第一个文档可以在所有字段上匹配,也可以只匹配一个。分数提供的唯一信息是它是最佳匹配。

是否有可能获得关于查询的标准化分数?例如,得分为1表示文档与查询完全匹配,得分为0.1表示文档匹配程度很差。


问题答案:

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

获得分数以判断该文档是否与查询匹配的问题是找到最适合该查询的文档,从而找到最高分数。使用elasticsearch和大多数(如果不是全部)度量标准,最大分数不受限制。

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

但是,所有的希望都不会丢失。除了可以对可能的最高分进行归一化之外,您还可以针对应该获得最高分的伪造理想文档进行归一化。例如,如果您要查询两个字段nameoccupation使用查询词Jane Doe,则Cook理想文档可以是

{
    "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),您会发现理想文档的得分较低。



 类似资料:
  • 问题内容: 好的,我刚开始使用Firebase。我已阅读:https://www.firebase.com/docs/data- structure.html, 并且已阅读:https://www.firebase.com/blog/2013-04-12-denormalizing- is- normal.html 所以我很困惑,因为一个似乎与另一个矛盾。您可以按层次结构组织数据,但是如果您想使其

  • **我试图聚合和找到价格范围,如果在基础上的嵌套报价数组(嵌套数组)的sellerInfoES对象。内部字段是"offerPrice"。如何在Elasticsearch中的嵌套数组字段上编写聚合。我尝试了以下查询,但它不工作。获取此错误:解析失败[在[price_ranges]中找到两个聚合类型定义:[嵌套]和[过滤器]] 映射: 查询:

  • 问题内容: **如果要基于SellerInfoES的嵌套要约价格数组(嵌套数组)对象,我正在尝试汇总和查找价格范围。内部字段是“ offerPrice”。我如何在Elasticsearch中的嵌套数组字段上编写聚合。我尝试了以下查询,但无法正常工作。收到此错误:解析失败[在[price_ranges]中找到了两个聚合类型定义:[嵌套]和[过滤器]] 对应: 查询: 问题答案: 您必须使用。在内部使

  • 我是Elasticsearch的新手,我面临一个问题。我的任务是搜索一组文档。例如,我有这样结构的数据: 但是困难的是,我如何获取所有带有project_id=abc的文档,然后通过与关键字“测试”匹配的任何其他字段(代码、名称、状态)搜索它们(例如)。我如何在Elasticsearch查询中做到这一点,请帮助我! 谢谢

  • 我是elasticsearch的新手,对如何进行过滤器、查询和聚合有一些想法,但不确定如何解决下面的问题。我希望能够从下面显示的文档中只查询公司的最新交付(日期和crate_quantity)。我不确定如何去做。有没有办法使用最大聚合从每个文档中只提取最近的交付?

  • 如何将下面的查询转换为Spring数据elasticsearch