如何使用与查询Elasticsearch中的keyword字段?
如何使用Elasticsearch中text字段的keyword子字段
背景说明
你插入文档后,Elasticsearch自动为color这类字符串字段生成了text主字段+keyword子字段的映射:
text类型会对内容分词,适合全文搜索(比如搜索"blu"能匹配"Blue")keyword子字段会保留原始字符串不分词,适合精确匹配、聚合统计、排序这类场景
存储数据时无需额外操作,Elasticsearch会自动把color的内容同步存入两个字段中。
查询keyword子字段的常用方式
1. 精确匹配查询(term查询)
如果你要查找颜色**完全等于"Blue"**的文档,直接使用color.keyword作为查询字段:
GET /vehicles/_search { "query": { "term": { "color.keyword": "Blue" } } }
如果用主字段color做term查询,可能因为分词逻辑导致匹配不到预期结果,而keyword子字段是严格匹配原始值的。
2. 聚合统计
统计每种颜色的文档数量,必须用color.keyword,否则会按分词后的单个词拆分统计(比如"Light Blue"会被拆成"light"和"blue"分开计数):
GET /vehicles/_search { "size": 0, "aggs": { "color_count": { "terms": { "field": "color.keyword" } } } }
3. 按精确值排序
如果要按颜色的原始字符串排序,使用color.keyword作为排序字段:
GET /vehicles/_search { "sort": [ { "color.keyword": "asc" } ] }
内容的提问来源于stack exchange,提问作者william007
相关产品推荐
相关产品推荐

