Elasticsearch - bool和模糊查询中过滤器/查询上下文的交互

时间:2018-03-27 16:09:03

标签: elasticsearch fuzzy-search booleanquery elasticsearch-6

在过滤器与查询上下文中的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子句之间的唯一区别是命中是否得分。但这似乎并非如此;在过滤器上下文中运行模糊查询似乎使查询的选择性降低。我错过了什么?可能导致这种情况的原因是什么?

0 个答案:

没有答案