我有一个问题要理解搜索逻辑。我有一个Elasticsearch 5.4实例并进行query_string查询。默认运算符是OR。其他设置未定义 现在我搜索
dog house
获得10,500个结果。然后我搜索
house dog
只获得6,200个结果。这对我来说有点好奇。
这是我的疑问:
{
"query" : {
"bool" : {
"must" : [
{
"query_string" : {
"query" : "dog house~",
"default_operator" : "OR",
"fuzziness" : "AUTO"
}
},
{
"term" : {
"client" : {
"value" : "MyClient",
"boost" : 1
}
}
},
{
"range" : {
"dateCreate" : {
"gte" : "2000-01-01T00:00:00+0200",
"lte" : "2000-12-31T23:59:59+0200"
}
}
}
]
}
},
"size" : 2,
"from" : 0,
"sort" : [
{
"_score" : {
"order" : "desc"
}
}
],
"collapse" : {
"field" : "title.keyword"
}
}
答案 0 :(得分:0)
这是因为~
运算符。如果您尝试删除它并再次运行查询,则如果查询为dog house
或house dog
,则该数字应相同。
如果您运行dog house~
或house~ dog
,即使结果数量也应相同,但如果您将~
从一个房间改为另一个房子,则数字会发生变化。
如果您希望两个单词指定模糊搜索可以匹配的换位距离1,您可以尝试使用house~ dog~
,然后如果更改顺序,结果将是相同的。