一.知识回顾
【0.ElasticSearch专栏在这里哟,想要学习的可自行进入专栏学习】
【1-ElasticSearch的基本介绍与用途、ElasticSearch中一些基本的概念、倒排索引的基本概念】
【2-Docker安装部署ElasticSearch和Kibanan详细步骤】
【3-ElasticSearch入门-索引的创建删除更新查询-文档的创建删除更新查询-Kibanan导入elasticsearch官方测试数据-postman测试】
二.ElasticSearch中的检索方式
在ElasticSearch中支持两种检索方式:官方手册快速查找链接
- 通过使用REST request URL 发送检索参数(uri+检索参数)
- 通过使用REST request body 发送检索参数 (uri+请求体)
2.1 第一种方式
GET blank/_search # 检索bank下的所有信息,包括 type 和 docs
GET blank/_search?q=*&sort=account_number:asc
响应结果信息
| 信息 | 描述 |
|---|---|
| took | ElasticSearch执行搜索的时间(毫秒) |
| time_out | 搜索是否超时 |
| _shards | 有多少个分片被搜索了,统计成功/失败的搜索分片 |
| hits | 搜索结果 |
| hits.total | 搜索结果统计 |
| hits.hits | 实际的搜索结果数组(默认为前10条文档) |
| sort | 结果的排序key,没有就按照score排序 |
| score和max_score | 相关性得分和最高分(全文检索使用) |

2.2 第二种方式
通过使用 REST request body 来反射检索参数 (uri+请求体)
GET bank/_search
第二种方式
GET blank/_search
{
"query":{
"match_all":{}
},
"sort":[
{
"account_number":"asc"
}
]
}
结果显示

三.Query DSL(domain-specific language 领域特定语言)
3.1 基本语法
ElasticSearch提供了一个可以执行的JSON风格的DSL(domain-specific language 领域特定语言),这个被称为Query DSL。
完整的语法结构
{
QUERY_NAME:{
ARGUMENT:VALUE,
ARGUMENT:VALUE,...
}
}
如果是针对某个字段,那么它的结构为
{
QUERY_NAME:{
FIELD_NAME:{
ARGUMENT:VALUE,
ARGUMENT:VALUE,...
}
}
}
案例模拟:

3.2 match
上面我们用到match_all是匹配所有的数据,接下来我们要学习的就是通过match进行条件匹配
如果对应的字段是基本类型(非字符串类型),则是精确匹配。
GET /blank/_search
{
"query": {
"match": {
"balance": 49989
}
}
}
精确查找balance值为49989的相关信息

如果对应的字段是字符串类型,则是全文检索
# match--字符串类型
GET /blank/_search
{
"query": {
"match": {
"address": "mill"
}
}
}
match返回的就是address中包含mill字符串的记录

3.3 match_phrase
将需要匹配的值当成一个整体单词(不分词)进行检索,短语匹配
# match_phrase 短语词组匹配,不分词
GET blank/_search
{
"query":{
"match_phrase":{
"address":"mill road"
}
}
}
查询出address中包含 mill road的所有记录,并给出相关性得分

3.4 multi_match[多字段匹配]
# 多字段匹配
GET blank/_search
{
"query": {
"multi_match": {
"query": "Mill Lee",
"fields": ["address","firstname"]
}
}
}
查询出address或者firstname中包含Mill Lee的记录

3.5 布尔查询
- 布尔查询又叫组合查询,bool用来实现复合查询,
bool把各种其它查询通过must(与)、must_not(非)、should(或)的方式进行组合 - 复合语句可以合并任何其他查询语句,包括复合语句也可以合并,复合语句之间可以相互嵌套,可以表达非常复杂的逻辑。
必须是女性并且不能是28岁
# bool组合查询
GET blank/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"gender": "F"
}
}
],
"must_not": [
{
"match": {
"age": 28
}
}
]
}
}
}
必须是女性并且不能是28岁案例演示

3.6 filter结果过滤
并不是所有的查询都需要产生分数,特别是那些仅用于"filtering"的文档,为了不计算分数,ElasticSearch会自动检查场景并且优化查询的执行。
匹配所有的数据,并且balance的结果分数在大于15000并且小于25000之间的所有结果
GET /blank/_search
{
"query": {
"bool": {
"must": { "match_all": {} },
"filter": {
"range": {
"balance": {
"gte": 15000,
"lte": 25000
}
}
}
}
}
}
匹配所有的数据,并且balance的结果分数在大于15000并且小于25000之间的所有结果

3.7 term
和match一样,匹配某个属性的值,全文检索字段用match,其他非text字段匹配用term
# term 非字符串类型
GET /blank/_search
{
"query":{
"term":{
"age":28
}
}
}

3.8 term、match、match keyword、match_phrase的区别
| 检索关键字 | 使用场景 |
|---|---|
| term | 非text使用 |
| match | 在text中我们实现全文检索-分词 |
| match keyword | 在属性字段后加.keyword 实现精确查询-不分词 |
| match_phrase | 短语查询,不分词,模糊查询 |
好了,关于【4-ElasticSearch中的检索方式-Kibana测试-Query DSL(domain-specific language 领域特定语言)常用的字段使用场景】就先学习到这里,更多的内容持续创作更新中。
本文介绍了ElasticSearch中的检索方式,包括通过URI和请求体两种方式,详细解析了match、match_phrase、multi_match、bool等QueryDSL查询语法,并通过实例展示了如何进行条件匹配和结果过滤。同时,探讨了term、match、match_phrase的区别,帮助读者理解ElasticSearch的检索机制。
474

被折叠的 条评论
为什么被折叠?



