gpt4 book ai didi

多个索引的 Elasticsearch 评分

转载 作者:行者123 更新时间:2023-11-29 02:51:24 31 4
gpt4 key购买 nike

我有一年中任何一个季度的索引(“index-2015.1”,“index-2015.2”...)

我在每个索引上有大约 3000 万个文档。

文档有一个文本字段('title')

我的文档排序方式是(1)_score (2)created date

问题是:

在“标题”字段上为所有索引(“index-201*”)搜索某些文本时,第一个结果总是来自一个索引。

假设我正在搜索“title=home”,并且我在“index-2015.1”上有 10k 个标题=home 的文档,在“index-2015.2”上有 10k 个标题=home 的文档,那么第一个结果是所有文档来自“index-2015.1”(而不是来自“index-2015.2”或混合),即使在“index-2015.2”上也有“创建日期”高于“index-2015.1”的文档。

这是有原因的吗?

最佳答案

原因可能是分数特定于索引。所以如果你真的有多个索引,文档的结果分数将针对每个索引计算(略有)不同。

简而言之,匹配文档的得分取决于查询词及其在索引中的出现次数。分数是根据索引计算的(实际上,默认情况下甚至针对每个单独的分片)。 elasticsearch 做了一些规范化,但我不知道那些细节。

我真的不能很好地解释它,但这是关于评分的文章。我想你至少想阅读关于 TF/IDF 的部分。我认为,这应该可以解释为什么你会得到不同的分数。

https://www.elastic.co/guide/en/elasticsearch/guide/current/scoring-theory.html


编辑:

因此,在我的机器上进行了一些测试后,似乎可以使用另一种 search_type 来获得适合您情况的分数。

POST /index1,index2/_search?search_type=dfs_query_then_fetch
{
"query" : {
"match": {
"title": "home"
}
}
}

重要的部分是search_type=dfs_query_then_fetch。如果您正在编写 java 或类似的东西,应该有一种方法可以在请求中指定它。有关 search_types 的详细信息,请参阅 documentation .

基本上,它会首先收集所有受影响的分片(+ 索引)上的词频。因此,分数应该概括所有这些。

关于多个索引的 Elasticsearch 评分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33432639/

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