将精确的字符串与数组中的一个字母匹配

时间:2020-06-23 14:38:53

标签: elasticsearch

我有来自Elastic的json:

"_source":{
  "secteurs":[
     "TEST-A",
     "B",
  ]
}

这个请求:

{"query":{"match":{"secteurs":{"query":"A"}}}}

我不明白为什么会返回一个带有“ TEST-A”的对象。我只需要“ A”专家,而不是“ TEST-A”

我尝试使用“ query_string”,结果相同。

映射:

"secteurs":{
   "type":"text",
   "fields":{
      "keyword":{
         "type":"keyword",
         "ignore_above":256
      }
   }
}

1 个答案:

答案 0 :(得分:1)

是的,正如我所怀疑的那样。这是standard analyser的行为。

索引TEST-A时,它将存储为

 {
    "tokens": [
        {
            "token": "test",
            "start_offset": 0,
            "end_offset": 4,
            "type": "<ALPHANUM>",
            "position": 0
        },
        {
            "token": "a",
            "start_offset": 5,
            "end_offset": 6,
            "type": "<ALPHANUM>",
            "position": 1
        }
    ]
}

因此它与a相匹配。

为解决您的问题,您可以使用以下

{"query":{"match":{"secteurs.keyword":{"query":"A"}}}}

注意:keyword是未经分析的数据版本。因此也区分大小写。

相关问题