问题: 我使用相同的查询多次查询elasticsearch,发现即使我运行相同的查询,返回的文档也不一致。我的查询如下:
GET idx/_search
{
"query": {
"bool": {
"must": [
{
"bool": {
"should": [
{
},
{
}
]
}
}
],
"filter": [
{
},
{
}
]
}
},
"rescore": {
}
}
}
我记下了运行相同查询四次的结果。
首次返回文档: 648626 629879 1237173 655329 9434601
文档第二次返回: 648626 1237173 503380 9434601 14530103
文档第三次返回: 648626 1237173 503380 9434601
文档第四次返回: 648626 629879 1237173 655329 9434601 14530103
我怀疑索引编制可能存在问题,因此添加了preference = _primary并获得了以下文档:
648626 629879 1237173 9434601 14530103
并且使用preference = _replica,我得到了以下文档:
648626 1237173 655329 503380 9434601
有了这个,我可以看到主文档和副本文档中的碎片不一致,并且当我全部四次查询时,文档648626 1237173和9434601在主文档和副本文档中很常见。
要再次确认,我设置了preference = _replica并在bool过滤器中添加了以下内容
{
"match": {
"id": 14530103
}
}
指定当我指定preference = _primary时返回的doc(1453010),但我仍然得到该文档,这与之前完成的练习相反。我进一步添加了“ explain”:true来查看该碎片,但它仅显示该碎片,并且没有提及它是主碎片还是副本碎片,因此很可能存在错误。
我有两个问题:
是否有可能使主数据库和副本数据库不同步?如果是这样,那将是解决方案,并且不会再发生这种情况。
有没有一种方法可以确认特定文档来自何处(主要或副本)?