修改嵌套整数属性时相同文档的搜索分数发生变化

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,
        },       
    ]
//
}

questionanswers.textText 字段,其中定义了相同的分析器。 answers 是一个包含 1 个或多个答案的列表。 clickscore 是一个 Integer 字段,我们将来会使用它来提高某些文档的相关性。当我们进行搜索时,我们总是在 questionanswers.text.

中查找匹配项

现在是奇怪的部分。

document 1document 2 具有完全相同的内容,因此在 questionanswers.text 中都包含文本的集群上进行搜索(例如“文本” ) returns 命中率完全相同:有道理。

但是,如果我们通过设置例如更新两个文档之一的 clickscore document 2 clickscore == 1 并且我们重复完全相同的搜索然后文档的分数不一样。

这怎么可能? clickscore 只是一个整数属性,它不应该影响搜索的分数,特别是因为我们只在 Text 字段中寻找匹配...

显然这个问题与分片统计数据没有及时更新有关,这导致了差异。

如果有人来到这里解决这个问题,解决这个问题的唯一方法是手动执行冲洗,所以 Index('...').flush() 并且分数再次相同。