代码之家  ›  专栏  ›  技术社区  ›  Karthikeyan

弹性搜索在默认情况下不作为字符串字段,也没有给出适当的匹配结果

  •  0
  • Karthikeyan  · 技术社区  · 7 年前

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

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

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

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

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

    1 回复  |  直到 7 年前
        1
  •  1
  •   Richa    7 年前

    这种行为是由于ES分析字符串的方式造成的。在这种情况下,你需要申请 wildcard 查询的原始字段 code 喜欢

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

    Java API或对此作出响应

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

    希望这有帮助!你看!