gpt4 book ai didi

Elasticsearch 巢 : specifying Id explicitly seems to cause inconsistent search scores

转载 作者:行者123 更新时间:2023-12-02 22:18:46 25 4
gpt4 key购买 nike

我有一个看起来像这样的模型类:

public class MySearchDocument
{
public string ID { get; set; }
public string Name { get; set; }
public string Description { get; set; }

public int DBID { get; set; }
}

我们总是使用批量索引。默认情况下,我们的搜索执行相对简单的 multi_match给予 ID更多的权重和 Name , 像这样:
{
"query": {
"multi_match": {
"query": "burger",
"fields": [
"ID^1.2",
"Name^1.1",
"Description"
],
"auto_generate_synonyms_phrase_query": true
}
}
}

我以前只是依靠 Id inference ,允许 Elasticsearch 使用我的 ID属性,但出于一些原因,最好使用 DBID作为 Elasticsearch 中的 Id 属性。我尝试了这 3 种不同的方法, 单独和组合 :
  • 批量索引时显式:new BulkIndexOperation<MySearchDocument>(d) { Id = d.DBID }
  • ConnectionSettings使用 DefaultMappingFor<MySearchDocument>(d => d.IdProperty(p => p.DBID))
  • 使用 MySearchDocument 上的属性: [ElasticsearchType(IdProperty = nameof(DBID))]

  • 所有这些似乎都按预期工作; _id索引文档中的字段被设置为我的 DBID属性(property)。但是,在我的集成测试中,搜索结果完全出乎意料。具体来说,我有一个测试:
  • 从头开始创建新索引。
  • 用少量 MySearchDocument 填充它小号
  • 发出 Refresh在索引上只是为了确保它准备好了。
  • 发出搜索。
  • 断言结果按预期顺序返回。

  • 通过 Id 推理,此测试始终通过。当使用上述任何或所有技术切换 Id 字段时,它可能会通过一半的时间。查看原始结果,始终返回正确的文档,但 _score同一文档在不同的测试运行中通常会有所不同。有时,变化的分数是与 ID 的文档相关联的分数。字段匹配搜索词,其他时候它是不同文档的分数。

    我已经尝试对测试进行编码以重复和并行运行。我尝试在发出 Refresh 后等待几秒钟,只是为了确保索引已准备就绪。这些都没有影响 - 测试与 Id 推理一致地通过,并且始终不一致。我知道这个世界上没有什么是真正随机的,所以我觉得我一定在这里错过了什么。让我知道更多细节是否会有所帮助。提前致谢。

    最佳答案

    搜索相关性分数是按分片计算的,哈希算法对 _id 的值进行计算确定给定文档将被索引到哪个主分片中。

    听起来您在索引 时可能会看到这种效果。小样 N > 1 中的文档数量主分片;在这种情况下,本地相关性分数可能不同到足以表现出一些奇怪的 _score s 回来了。随着更大的文档集和均匀分布,本地分片分数的差异会减少。

    为了测试目的,您可以采取几种方法来克服这个问题:

  • 使用单个主分片

  • 或者
  • 使用 dfs_query_then_fetch 发出搜索请求时。这告诉 Elasticsearch 先获取本地相关性分数以计算全局相关性分数,然后使用 _score 的全局分数. There is a slight overhead to using dfs_query_then_fetch .

  • 还可以查看 "Relevance is Broken!" 部分来自 Elasticsearch 权威指南;尽管该指南引用了 Elasticsearch 2.x,但其中大部分内容仍然与更高版本非常相关。

    关于 Elasticsearch 巢 : specifying Id explicitly seems to cause inconsistent search scores,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53676107/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com