Elasticsearch同一字段多通配符条件查询的等价实现问题
解决Elasticsearch多条件全匹配查询问题
你原来的查询用了should子句,这会导致只要匹配三个条件里的任意一个就返回结果,所以才出现匹配过多的情况。要实现三个参数全部匹配才返回的要求,只需要把should替换成must,或者直接将三个wildcard条件放到外层的must数组中即可。
正确的查询语句
{ "query": { "bool": { "must": [ { "wildcard": { "contact.fullname_phone": "john*" } }, { "wildcard": { "contact.fullname_phone": "do*" } }, { "wildcard": { "contact.fullname_phone": "123456*" } } ] } } }
关于lower的处理
对应SQL里的lower(fullname_phone),如果你的contact.fullname_phone字段存储的是混合大小写内容,建议给字段设置小写标准化器(normalizer),确保查询时自动统一大小写:
{ "mappings": { "properties": { "contact.fullname_phone": { "type": "keyword", "normalizer": "lowercase" } } } }
设置后,查询时无需手动转小写,Elasticsearch会自动将字段值和查询条件统一为小写进行匹配,完全等价于SQL中的lower处理。
内容的提问来源于stack exchange,提问作者mamba
相关产品推荐
相关产品推荐

