
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年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。