随笔 20250413 Elasticsearch 的 term 查询

你这个问题非常经典,来自于 Elasticsearch 的 term 查询是精确匹配(case-sensitive,大小写敏感)


🧨 为什么查不到 "World"

你的查询语句是:

复制代码
GET /movie/_search
{
  "query": {
    "term": {
      "tagline": "World"
    }
  }
}

这条语句的含义是:

查找 tagline 字段中精确值为 "World"(区分大小写) 的文档。


🔍 但是你的数据中可能是:

复制代码
{
  "tagline": "world"
}

或者:

复制代码
{
  "tagline": "the world is beautiful"
}

这种情况下,term 查询根本不会命中,因为:

term 查询不会分析(不分词)、不做小写转换、只查精确 token。


✅ 正确写法:使用 match 查询(可自动分词 + 忽略大小写)

复制代码
GET /movie/_search
{
  "query": {
    "match": {
      "tagline": "World"
    }
  }
}

🔥 match 会将 "World" 转为 "world",也会对 tagline 字段做分词处理,因此可以模糊匹配、大小写不敏感。


❓ 但是 term 一定没用吗?

不是,如果你明确知道 taglinekeyword 类型字段(未分词) ,你可以查它的 .keyword

复制代码
GET /movie/_search
{
  "query": {
    "term": {
      "tagline.keyword": "World"
    }
  }
}

但前提是:你需要在字段映射(mapping)中配置了 .keyword(text + keyword)这种类型。


🧠 总结:

你的目的 推荐查询方式
查 "包含 world" match 查询
精确查 "World"(大小写) term + .keyword(非分词字段)
查部分词、模糊匹配 match / match_phrase

需要我帮你分析你 index 的 mapping 吗?你可以贴一下 /movie/_mapping 的结构,我可以告诉你字段类型是否支持 .keyword,从根上解决 💡

相关推荐
秃头菜狗33 分钟前
十四、运行经典案例 wordcount
大数据·linux·hadoop
INFINI Labs39 分钟前
Elasticsearch 备份:方案篇
大数据·elasticsearch·搜索引擎·gateway·snapshot·backup·ccr
Java战神41 分钟前
Hadoop
大数据·hadoop·分布式
望获linux1 小时前
【实时Linux实战系列】实时系统的可观测性:Prometheus 与 Grafana 集成
大数据·linux·服务器·开发语言·网络·操作系统
玄妙尽在颠倒间2 小时前
SQL中的四大核心语言:DQL、DML、DDL、DCL
大数据·数据库
NickBi2 小时前
龙芯 LoongArch64编译es7.17.20
后端·elasticsearch
渣渣盟3 小时前
中文分词技术全解析
搜索引擎·全文检索·lucene
周杰伦_Jay3 小时前
【Git操作详解】Git进行版本控制与管理,包括分支,提交,合并,标签、远程仓库查看
大数据·ide·git·科技·分类·github
lifallen4 小时前
从Apache Doris 学习 HyperLogLog
java·大数据·数据仓库·算法·apache
DolphinScheduler社区5 小时前
# 3.1.8<3.2.0<3.3.1,Apache DolphinScheduler集群升级避坑指南
java·大数据·开源·apache·任务调度·海豚调度