在过滤器与查询上下文中的bool查询中运行模糊查询时,我看到了一些奇怪的效果。我在Elasticsearch 6.0.0上。
我有一个索引,其文档有一个字段ng e2e --no-serve --base-href=https://someurl.com:8080
。如果我运行以下内容,例如:
firstName
我得到5596次点击。现在,如果我将模糊术语放在bool must子句中:
{
"query": {
"fuzzy": {
"firstName": {
"value": "yvonne",
"fuzziness": 1
}
}
}
}
我仍然得到5596.如果我将must更改为过滤子句:
{
"query": {
"bool": {
"must": [
{
"fuzzy": {
"firstName": {
"value": "yvonne",
"fuzziness": 1
}
}
}
]
}
}
}
同样,5596再次。不足为奇,对吧?
让我们将{
"query": {
"bool": {
"filter": [
{
"fuzzy": {
"firstName": {
"value": "yvonne",
"fuzziness": 1
}
}
}
]
}
}
}
更改为2而不是1.再次运行简单的模糊术语查询:
fuzziness
现在我获得6079次点击。较大的编辑距离应该匹配更多的文档,似乎合理。现在我再次将它作为必须条款粘贴在bool查询中:
{
"query": {
"fuzzy": {
"firstName": {
"value": "yvonne",
"fuzziness": 2
}
}
}
}
仍然是6079.现在将must子句更改为过滤器:
{
"query": {
"bool": {
"must": [
{
"fuzzy": {
"firstName": {
"value": "yvonne",
"fuzziness": 2
}
}
}
]
}
}
}
这会返回 7980 点击。
据我了解,bool查询中must和filter子句之间的唯一区别是命中是否得分。但这似乎并非如此;在过滤器上下文中运行模糊查询似乎使查询的选择性降低。我错过了什么?可能导致这种情况的原因是什么?