Elasticsearch 默认不考虑字符串字段,没有给出正确的匹配结果

Elastic search not considering as string field by default and not giving proper matching results

我正在使用以下查询查询 ElasticSearch,它根据查询提供结果以及一些其他不相关的数据。

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

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

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

为什么第一个查询returns是一些其他不相关的数据?

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

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

Java API 或者对此的回应是

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

希望对您有所帮助!!