term 与 terms 查询
本章定位:term/terms 是 Elasticsearch 的"精确匹配"查询——不做分词,直接去倒排索引中找词项。用于 keyword 字段、ID 等精确值。
定义与作用
term 查询:不分词,精确匹配倒排索引中的词项。terms 查询:term 的多值版本,匹配列表中任意一个词项。
核心规则:term 查 keyword 字段(不限)可直接匹配;term 查 text 字段时匹配的是分词后的词项,可能查不到完整输入值。
完整示例:小崔的精确筛选
# keyword 字段精确匹配(推荐)
POST /students/_search
{
"query": {
"bool": {
"filter": [
{ "term": { "province": "广东" } },
{ "terms": { "status": ["active", "enrolled"] } }
]
}
}
}
避免 term 查 text 字段陷阱
# ❌ text 字段 term 查不到!
{ "term": { "name": "黄小俪" } }
# → text 字段分词后是 ["黄", "小", "俪"],没有 "黄小俪" 这个词项
# ✓ 用 keyword 子字段
{ "term": { "name.keyword": "黄小俪" } }
小结
term/terms 是精确查询,必须查 keyword 字段或分词后的词项。面试陷阱:term 查 text 字段查不到结果。