修改嵌套整数属性时相同文档的搜索分数发生变化
Search score of identical documents changes when nested integer attribute is modified
我们今天偶然发现了这个问题,无法真正理解发生了什么。
假设我们有一个非常简单的索引,其中只有两个内容相同的文档。
// document 1
{
"question": "text of the question",
// nested part
"answers": [
{
"text": "text of first answer",
"clickscore": 0,
},
]
//
}
// document 2
{
"question": "text of the question",
// nested part
"answers": [
{
"text": "text of first answer",
"clickscore": 0,
},
]
//
}
question
和 answers.text
是 Text
字段,其中定义了相同的分析器。 answers
是一个包含 1 个或多个答案的列表。 clickscore
是一个 Integer
字段,我们将来会使用它来提高某些文档的相关性。当我们进行搜索时,我们总是在 question
和 answers.text
.
中查找匹配项
现在是奇怪的部分。
document 1
和 document 2
具有完全相同的内容,因此在 question
和 answers.text
中都包含文本的集群上进行搜索(例如“文本” ) returns 命中率完全相同:有道理。
但是,如果我们通过设置例如更新两个文档之一的 clickscore
document 2
clickscore == 1
并且我们重复完全相同的搜索然后文档的分数不一样。
这怎么可能? clickscore
只是一个整数属性,它不应该影响搜索的分数,特别是因为我们只在 Text
字段中寻找匹配...
显然这个问题与分片统计数据没有及时更新有关,这导致了差异。
如果有人来到这里解决这个问题,解决这个问题的唯一方法是手动执行冲洗,所以 Index('...').flush()
并且分数再次相同。
我们今天偶然发现了这个问题,无法真正理解发生了什么。 假设我们有一个非常简单的索引,其中只有两个内容相同的文档。
// document 1
{
"question": "text of the question",
// nested part
"answers": [
{
"text": "text of first answer",
"clickscore": 0,
},
]
//
}
// document 2
{
"question": "text of the question",
// nested part
"answers": [
{
"text": "text of first answer",
"clickscore": 0,
},
]
//
}
question
和 answers.text
是 Text
字段,其中定义了相同的分析器。 answers
是一个包含 1 个或多个答案的列表。 clickscore
是一个 Integer
字段,我们将来会使用它来提高某些文档的相关性。当我们进行搜索时,我们总是在 question
和 answers.text
.
现在是奇怪的部分。
document 1
和 document 2
具有完全相同的内容,因此在 question
和 answers.text
中都包含文本的集群上进行搜索(例如“文本” ) returns 命中率完全相同:有道理。
但是,如果我们通过设置例如更新两个文档之一的 clickscore
document 2
clickscore == 1
并且我们重复完全相同的搜索然后文档的分数不一样。
这怎么可能? clickscore
只是一个整数属性,它不应该影响搜索的分数,特别是因为我们只在 Text
字段中寻找匹配...
显然这个问题与分片统计数据没有及时更新有关,这导致了差异。
如果有人来到这里解决这个问题,解决这个问题的唯一方法是手动执行冲洗,所以 Index('...').flush()
并且分数再次相同。