ElasticSearch查询定义
Elasticsearch查询提供了一种强大的检索数据方式,这种检索方式称之为Query DSL,采用基于 RESTful 风格的接口封装成 JSON 格式的对象。
ElasticSearch查询语法
语法格式如下:
GET /索引名/_search { json格式请求体数据 }
Elasticsearch常见查询
1.查询所有(match_all)
match_all:查询全部内容,不指定任何查询条件。
例如查询所有:
GET mikechen/_search { "query": { "match_all": {} } }
如果是针对某个字段查询:
GET mikechen/_search { "query": { "match_all": {} }, "sort": [ { "balance": { "order": "desc" } } ] }
2.关键词查询(term)
term和match 是最常用的两个查询,term是代表完全匹配,也就是精确查询,搜索前不会再对搜索词进行分词拆解。
term属于精确匹配,只能查单个词,如果我只想精确匹配 love China这个词:
GET /mikechen/_search { "query": { "term": { "title": "love China" } } }
term就精确匹配 love China这个词。
3.关键词查询(terms)
terms:相当于多个term检索, 类似于SQL中in关键字的用法, 即在某些给定的数据中检索。
{ "query":{ "terms":{ "keyword":[ "mikechen", "互联网架构" ] } } }
4.范围查询(range)
range 关键字: 用来指定查询指定范围内的文档。
比如:查询年龄字段大于等于18,小于30的数据:
{ "query":{ "range":{ "age":{ "gte":18, "lt":30 } } } }
备注,大于、小于等判断标识为:
gt:> gte:>= lt:< lte:<=
5.前缀查询(prefix)
前缀查询(prefix):返回包含指定前缀的所有文档。
比如:查询名字为mikechen开头的,可以使用prefix 查询:
GET /user/_search { "query": { "prefix": { "name": "mikechen" } } }
6.通配符查询(wildcard)
通配符查询指的就是:匹配字段被通配符表达式匹配的文档。
比如::*代表0个或多个字符:
GET /user/_search { "query": { "wildcard":{ "name":"mikechen*"} } }
比如:? 代表任意1个字符等:
GET /user/_search { "query": { "wildcard": { "name": "mike?chen"} } }
7.正则查询(Regexp)
正则查询其实很容易理解,就是用正则表达式来匹配查询,可以实现比 通配符查询 更复杂的模式进行查询。
比如:
POST /mikechen/book/_search { "query": { "regexp" : { "authors" : "t[a-z]*y" } } }
8.复合查询
在实际应用当中,有时候搜索条件复杂,我们可以使用复合查询,也叫组合查询。
主要是bool查询,bool query 可以将任意多个简单查询组装在一起,有四个关键字可供选择:
1)must
文档必须匹配 must 选项下的查询条件。
2)should
文档可以匹配 should 下的查询条件,也可以不匹配。
3)must_not
文档必须不满足 must_not 选项下的查询条件。
4)filter
类似于 must,但是 filter 不评分,只是过滤数据。
示例:查询name 属性中必须包含 java以及info信息含有mikechen互联网架构的书籍。
GET books/_search { "query": { "bool": { "must": [ { "term": { "name": { "value": "java" } } } ], "should": [ { "match": { "info": "mikechen互联网架构" } } ] } } }
9.模糊查询(Fuzzy Queries)
模糊查询是一种误拼写时的fuzzy模糊搜索技术,用于搜索的时候可能输入的文本会出现误拼写的情况。
比如:输入”方财兄“,这时候也要匹配到“方才兄”。
GET /blogs_index/_search { "query": { "fuzzy" : { "author": { "value": "方财兄", "fuzziness": 1, "prefix_length": 1, "max_expansions": 100 } } } }
陈睿mikechen
10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
关注「mikechen」公众号,获取更多技术干货!
后台回复【面试】即可获取《史上最全阿里Java面试题总结》,后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》