弹性搜索默认情况下不考虑字符串字段,也没有给出正确的匹配结果

时间:2018-06-12 14:50:08

标签: java elasticsearch kibana elastic-stack elasticsearch-query

我使用以下查询查询ElasticSearch,并根据查询和其他一些不相关的数据给出结果。

GET items/_search
{
  "query" :{
      "match": {"code": "*7000-8002-W*"}
  }
}

但如果我这样查询,我会得到正确的结果:

GET items/_search
{
  "query" :{
      "match": {"code": "*S6617523*"}
  }
}

为什么第一个查询会返回其他一些不相关的数据?

1 个答案:

答案 0 :(得分:1)

此行为是由于ES分析字符串的方式。在这种情况下,您需要在wildcard的原始字段上应用code查询,如

{ 
"query": { 
 "wildcard": { 
  "code.keyword": { 
  "value": "*7000-6000*" 
    } 
   } 
  } 
 }

Java API或对此的响应

QueryBuilders.wildcardQuery("code.keyword","*7000-6000*");

希望这有助于!!