如何构建ElasticSearch查询语句获取full_name包含Edwin的索引数据
原因说明
term 查询是精确匹配查询,仅会匹配与查询值完全一致的分词结果。默认情况下full_name为text类型,数据写入时会经过标准分词器处理:大写转小写、按空格拆分词条,如果你之前用term查询传入大写的Edwin,就无法匹配到分词后存储的小写edwin词条,导致无结果。
正确查询方案
方案1:使用match查询(优先推荐)
match查询会自动对查询值做和写入时一致的分词处理,是全文检索场景最适配的查询方式:
GET 替换为你的索引名称/_search { "query": { "match": { "full_name": "Edwin" } } }
方案2:使用校正后的term查询
如果你需要使用term查询,需要传入分词后实际存储的小写词条:
GET 替换为你的索引名称/_search { "query": { "term": { "full_name": "edwin" } } }
方案3:full_name为keyword类型时的模糊查询
如果你的full_name字段设置为未分词的keyword类型,需要匹配任意位置包含Edwin的内容,可以使用wildcard查询:
GET 替换为你的索引名称/_search { "query": { "wildcard": { "full_name": "*Edwin*" } } }
注:
wildcard查询性能相对较低,非必要场景优先使用match查询。
内容的提问来源于stack exchange,提问作者Sokmesa Khiev
相关产品推荐
相关产品推荐

