在过滤器与查询上下文中的布尔查询中运行模糊查询时,我看到了一些奇怪的效果。我在 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。如果我将必须更改为过滤子句:
{
"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次点击。
据我了解,布尔查询中的 must 和 filter 子句之间的唯一区别是命中是否计分。但这似乎不是真的。在过滤器上下文中运行模糊查询似乎使查询的选择性降低。我错过了什么?这可能是什么原因造成的?