354 字
2 分钟
关于ES查询遇到的坑
1. ES中关于text类型的字段的精确(term)匹配
索引中的某个字段的类型为text,并且使用了分词,那么想要进行term 匹配查询的时候,要使用.keyword子字段(前提是开启了多字段映射)
如果你知道该字段在mapping中启用了fields.keyword
{ "term":{"name.keyword":"zhangsan"}}✅ 使用term前的Checklist:
- 你是否理解这个字段是
text还是keyword? - 如果是
text,你是否想要的是“完整的字符串一致性”? - 你是否可以用
.keyword字段替代? - 你是否需要token级别的精确查找(如某个词出现与否)?
2. ES组合查询的嵌套问题
Elasticsearch组合查询基础:bool语义树
在ES中,组合查询最核心的语义结构是 bool:
json复制编辑{ "bool": { "must": [...], // 类似 SQL 中的 AND "should": [...], // 类似 SQL 中的 OR "must_not": [...], // 类似 SQL 中的 NOT "filter": [...] // 类似 must,但不影响打分 }}每个字段都可以嵌套任意的bool,从而构建出“语法树”般的复杂查询结构:
json复制编辑{ "bool": { "must": [ { "match": { "title": "Elasticsearch" }}, { "bool": { "should": [ { "match": { "author": "Peanut" }}, { "match": { "author": "GPT" }} ], "must_not": [ { "term": { "status": "draft" }} ] } } ] }}在这套系统中,查询的嵌套只是逻辑上的,不会自动处理文档结构的嵌套问题。
关于ES查询遇到的坑
https://fuwari.vercel.app/posts/关于es遇到的坑/