ElasticSearch按类型搜索:指定索引类型文档的检索方法求助
别慌!我来给你拆解清楚Elasticsearch的检索操作,从最基础的正确用法说起,再帮你排查可能踩的坑:
基础检索操作(REST API)
这是日常用得最多的检索方式,分两种场景:
1. 知道文档ID的精准检索
如果你还记得存入时指定的文档ID,直接用这个GET请求就能快速拿到文档:
GET /<你的索引名称>/<你的类型名称>/<文档ID>
举个实际例子:假设你的索引是user_info,类型是admin,文档ID是u_001,那请求就是:
GET /user_info/admin/u_001
注意:Elasticsearch 7.0及以上版本已经废弃了多类型,默认类型是
_doc,如果你的ES版本较高,且存入时没自定义类型,把上面的类型名换成_doc或者直接省略类型部分也可以,比如GET /user_info/u_001。
2. 不知道ID,按字段内容检索
如果记不住ID,就用查询语句根据字段内容搜索,最常用的是match查询(会对检索内容分词,适合文本字段):
GET /<你的索引名称>/_search { "query": { "match": { "<目标字段名>": "<要检索的内容>" } } }
比如你存的文档里有个username字段是ivan,索引是user_info,那请求就是:
GET /user_info/_search { "query": { "match": { "username": "ivan" } } }
如果需要完全精确匹配(不分词),比如要找username严格等于Ivan_Y的文档,就用term查询(注意要给字段加.keyword后缀,针对text类型字段):
GET /user_info/_search { "query": { "term": { "username.keyword": "Ivan_Y" } } }
常见报错排查(你可能踩的坑)
- 索引/类型/字段名大小写错误:Elasticsearch对这些名称是区分大小写的!比如你存的索引是
User_Info,检索时写user_info就会报索引不存在的错误。 - 文档ID格式不匹配:如果你存入时用的是字符串类型的ID(比如
"u_001"),检索时别写成数字u_001,虽然大部分情况下ES会兼容,但偶尔会导致找不到文档。 - 版本不兼容:如果你用的是ES7+,还在请求里写了自定义的多类型,会直接报错,这时候把类型换成默认的
_doc或者去掉类型参数即可。 - 字段不存在:检查你检索的字段名是不是和存入时完全一致,比如存入时是
user_name,检索时写成username,肯定查不到结果。
内容的提问来源于stack exchange,提问作者Ivan Yurchenko
相关产品推荐
相关产品推荐

