悟空,拿我的打狗棒来

fuzzy查询放在filter里和放在must里命中结果数量相差悬殊

Elasticsearch | 作者 guoxiaoguo | 发布于2018年06月25日 | 阅读数:2621

1、fuzzy查询放在filter里
{
  "size": 0,
  "query": {
    "bool": {
      "filter": {
        "fuzzy": {
          "queryKeyword": {
            "value": "男士拖鞋",
            "fuzziness": 2,
            "max_expansions": 50,
            "transpositions": true
          }
        }
      }
    }
  }
}
结果:
  "hits" : {
    "total" : 845274,
    "max_score" : 0.0,
    "hits" : [ ]
  }

2、fuzzy查询放在must里
{
  "size": 0,
  "query": {
    "bool": {
      "must": {
        "fuzzy": {
          "queryKeyword": {
            "value": "男士拖鞋",
            "fuzziness": 2,
            "max_expansions": 50,
            "transpositions": true
          }
        }
      }
    }
  }
}
结果:
  "hits" : {
    "total" : 47801,
    "max_score" : 0.0,
    "hits" : [ ]
  }

这是什么原因呢?
 
已邀请:

guoxiaoguo

赞同来自:

忘了说了 queryKeyword是 keyword类型

laoyang360 - 《一本书讲透Elasticsearch》作者,Elastic认证工程师 [死磕Elasitcsearch]知识星球地址:http://t.cn/RmwM3N9;微信公众号:铭毅天下; 博客:https://elastic.blog.csdn.net

赞同来自:

执行DSL的最前面加上 profile:true  看看到底发生了什么?

guoxiaoguo

赞同来自:

{
  "size": 10,
  "query": {
    "bool": {
      "must": [
        {
          "term": {
            "queryKeyword": "鞋柜"
          }
        },
        {
          "fuzzy": {
            "queryKeyword": {
              "value": "公",
              "fuzziness": 2,
              "max_expansions": 50,
              "transpositions": true
            }
          }
        }
      ]
    }
  }
}

把fuzzy放到must里匹配不到任何文档,
但是放到filter里是可以匹配到的

kennywu76 - Wood

赞同来自:

我在自己的集群随便找了个索引,对比测试了一下类似的查询,没能复现该问题,也就是用must和filter的结果一样。 是否能提供一下该索引的mapping和少量能复现问题的样例数据?  另外搜索里可以打开profile: true,看下底层查询如何执行的。

要回复问题请先登录注册