弹性搜索6.2查询无法使用过滤器产生正确的结果

时间:2018-07-14 06:32:02

标签: elasticsearch elasticsearch-6

"query": {
"bool": {
  "should": [
    {
      "dis_max": {.........}
    }
  ],
  "filter":  [
        {
          "term": {
            "city": "default_city"
          }
        },
        {
          "term": {
            "used_for": "sell"
          }
        },
        {
          "terms": {
            "category": ["C1","C2"]
          }
        }
      ]
}
}

但是,产生的结果还包含“ used_for”字段为“ non-sell”的文档,从而将“ used_for”字段作为关键字类型,从而完全停止产生任何结果。请让我知道我要去哪里错了。

1 个答案:

答案 0 :(得分:0)

对于standard analyzer,“非出售”将被存储为两个令牌:“非”和“出售”,因此对“出售”的搜索将匹配。 如果将字段设置为关键字类型,则应该可以解决您的问题,但请记住,搜索必须匹配整个字段,任何空格,并且区分大小写。 如果您切换到whitespace analyzer,则会保留连字符和大小写,但不会保留空格。