ElasticSearch学习(五)ElasticSearch基本操作:精确查询
admin
2024-03-26 04:32:05
0次

六、ElasticSearch基本操作:精确查询

ES最关键的地方就在于查询

一.Query String

1、查询所有数据

GET 索引名称/_search

2、带参查询

GET 索引名称/_search/q=键:值
#例,只会去date里查询符合2022-06-01的
GET product/_search?q=date:2022-06-01

3、分页查询

#查询XX索引,从位置0开始,查询十条,以price排desc的序。
GET  索引名称/_search?from=0&size=10&sort=:price:desc

5、全文检索(在所有有索引的字段上进行检索)

#相当于在所有有索引的字段查询2022-06-01
GET product/_search?q=2022-06-01

6、数据结构查询

GET 索引名称/_mapping

二.DSL

关于查询,理解match和term的区别是非常重要的。
match和term最大的差别在于,查询条件是否分词。
举例说明
“xiaomi phone”,如果使用match查询是会分成两个词:xiaomi+phone,如果使用的是term则查询条件不分词:xiaomi phone。

1、全文检索match(match和term为参数条件)

1.match

match查询的是key对应的value,这里的key和value都会分词。

GET test/_search 
{"query": {"match": {"key": "value"}}
}

2.match_all

查询全部

GET test/_search 
{"query": {"match_all": {}}
}

3.multi_match

多字段查询,查询name或type中包含phone的数据

GET test/_search 
{"query": {"multi_match": {"query": "phone","fields": ["name","type"]}}
}

4.match_phrase

这个是最复杂的match查询,比较像term但是又和term不一样,以ni shi zhu为查询条件举例,ni shi zhu会被分词为"ni",“shi”,“zhu”,但是分词具有顺序,对应的value中必须包含这三个分词+顺序没有被打乱+中间没有插入任何词

GET test/_search 
{"query": {"match_phrase": {"word": "ni shi zhu"}}
}

2、精确查询term(查询条件不分词)(match和term为参数条件)

1.term

这里的查询条件不会分词,会按"ni shi zhu"直接在word里进行查询。

GET test/_search 
{"query": {"term": {"word": "ni shi zhu"}}
}

2.term与keyword

#数据类型如下
"text": {"type": "text","fields": {"keyword": {"type": "keyword","ignore_above": 256}}
}

对于text类型的字段,如果是"ni shi zhu",则会被分解为"ni",“shi”,"zhu"进行保存,只有在keyword字段才会查询到全称(keyword默认之为256,小于256字段长度取所有值,大于256则只截取前256个字符。)

GET test/_search 
{"query": {"term": {"text.keyword": "xiaomi nfc phone"}}
}

3.terms

#查询字段为FIELD,值为VALUE1和VALUE2的数据。
GET test/_search
{"query": {"terms": {"FIELD": ["VALUE1","VALUE2"]}}
}

3、范围查询range

#查询字段为FIELD,大于等于10并小于等于20的所有数据。
#gt=大于 gte=大于等于
#lt=小于 lte=小于等于
GET test/_search 
{"query": {"range": {"FIELD": {"gte": 10,"lte": 20}}}
}

4、filter和query的区别

1.查询对比

filter,仅仅只是按照搜索条件过滤出需要的数据而已,不计算任何相关度分数,对相关度没有任何影响。
query,会计算每个document相对于搜索条件的相关度,并按照相关度进行排序。
一般来说,如果你是在进行搜索,需要将最匹配搜索条件的数据先返回,那么用query;如果你只是要根据一些条件筛选出一部分数据,不关注排序,那么使用filter。

2.性能对比

filter,不需要计算相关度分数,不需要按照相关度分数进行排序,同时还有内置的机制,自动cache最常使用filter的数据。
query,相反,要计算相关度分数,按照分数进行排序,而且无法cache结果。

5、组合查询bool

bool可以组合多个查询条件,bool查询是采用more_matches_is_better的机制,因此满足Must和should子句的文档会合并起来计算分值。

1.must:必须满足

must中可以使用term或者match,这里主要列举写法,而且写法基本上一样,只是修改了不同的条件。

GET test/_search 
{"query": {"bool": {"must": [{"term": {"FIELD": {"value": "VALUE"}}}]}}
}GET test/_search 
{"query": {"bool": {"must": [{"term": {"FIELD": {"value": "VALUE"}}},{"match_phrase": {"FIELD": "PHRASE"}}]}}
}

2.should:或

GET test/_search 
{"query": {"bool": {"should": [{"term": {"FIELD": {"value": "VALUE"}}},{"match_phrase": {"FIELD": "PHRASE"}}]}}
}

3.must_not:必须不,不计分

GET test/_search 
{"query": {"bool": {"must_not": [{"term": {"FIELD": {"value": "VALUE"}}},{"match_phrase": {"FIELD": "PHRASE"}}]}}
}

4.filter

GET test/_search 
{"query": {"bool": {"filter": [{"term": {"FIELD": {"value": "VALUE"}}},{"match_phrase": {"FIELD": "PHRASE"}}]}}
}

5.minimum_should_match

GET test/_search 
{"query": {"bool": {"minimum_should_match": [{"term": {"FIELD": {"value": "VALUE"}}},{"match_phrase": {"FIELD": "PHRASE"}}]}}
}

相关内容

热门资讯

黑科技辅助!紫运鸿(辅助),微... 黑科技辅助!紫运鸿(辅助),微乐三打一总是是真的有透视挂攻略(确实有辅助挂)1、金币登录送、破产送、...
推荐十款!阿坝州斗十四透视功能... 推荐十款!阿坝州斗十四透视功能方法,阿坝州斗十四原来真的有透视方法(有辅助挂规律)1、完成阿坝州斗十...
黑科技作弊器!凑一桌游戏(作弊... 黑科技作弊器!凑一桌游戏(作弊器),乐天游果然存在有透视挂app(有辅助挂总结)1、完成凑一桌游戏有...
黑科技外挂!卡农大厅(外挂),... 黑科技外挂!卡农大厅(外挂),火狐竟然真的是有透视挂脚本(有辅助挂助手)所有人都在同一条线上,像星星...
黑科技透视器!芊禧休闲(透视器... 黑科技透视器!芊禧休闲(透视器),中至吉安麻将切实是有透视挂app(有辅助挂秘诀)1、该软件可以轻松...
推荐几款新版!新大海互娱辅助功... 推荐几款新版!新大海互娱辅助功能软件,新大海互娱真是真的有辅助软件(有辅助挂解惑)1、许多玩家不知道...
一分钟了解!掌酷约一把辅助器功... 一分钟了解!掌酷约一把辅助器功能方法,掌酷约一把都是是有辅助器方法(有辅助挂功能)1、一分钟了解!掌...
黑科技透视挂!百川(透视挂),... 黑科技透视挂!百川(透视挂),贝壳互娱厅都是真的有透视挂工具(真实有辅助挂)1、黑科技透视挂!百川(...
玩家必备攻略!雅苑湖北麻将透视... 玩家必备攻略!雅苑湖北麻将透视挂功能工具,雅苑湖北麻将总是真的是有透视挂工具(有辅助挂秘笈)1、让任...
黑科技作弊器!心悦联盟(作弊器... 黑科技作弊器!心悦联盟(作弊器),乘风破浪好像是有透视挂教程(有辅助挂神器)黑科技作弊器!心悦联盟(...