在过滤器与查询上下文中的bool查询中运行模糊查询时,我看到了一些奇怪的效果 . 我在Elasticsearch 6.0.0上 .

我有一个索引,其文档有一个字段 firstName . 如果我运行以下代码,例如:

{
  "query": {
    "fuzzy": {
      "firstName": {
        "value": "yvonne",
        "fuzziness": 1
      }
    }
  }
}

我得到5596次点击 . 现在,如果我将模糊术语放在bool must子句中:

{
  "query": {
    "bool": {
      "must": [
        {
          "fuzzy": {
            "firstName": {
              "value": "yvonne",
              "fuzziness": 1
            }
          }
        }
      ]
    }
  }
}

我仍然得到5596.如果我将must更改为filter子句:

{
  "query": {
    "bool": {
      "filter": [
        {
          "fuzzy": {
            "firstName": {
              "value": "yvonne",
              "fuzziness": 1
            }
          }
        }
      ]
    }
  }
}

同样,5596再次 . 不足为奇,对吗?

让我们将 fuzziness 更改为2而不是1.再次运行简单模糊项查询:

{
  "query": {
    "fuzzy": {
      "firstName": {
        "value": "yvonne",
        "fuzziness": 2
      }
    }
  }
}

现在我得到6079次点击 . 较大的编辑距离应该匹配更多的文档,似乎合理 . 现在我再次将它作为必须条款放在bool查询中:

{
  "query": {
    "bool": {
      "must": [
        {
          "fuzzy": {
            "firstName": {
              "value": "yvonne",
              "fuzziness": 2
            }
          }
        }
      ]
    }
  }
}

仍然是6079.现在将must子句更改为过滤器:

{
  "query": {
    "bool": {
      "filter": [
        {
          "fuzzy": {
            "firstName": {
              "value": "yvonne",
              "fuzziness": 2
            }
          }
        }
      ]
    }
  }
}

这将返回7980次点击 .

据我了解,bool查询中must和filter子句之间的唯一区别是命中是否得分 . 但这似乎不是真的;在过滤器上下文中运行模糊查询似乎使查询的选择性降低 . 我错过了什么?可能是什么导致了这个?