Elasticsearch进阶检索

本文介绍了Elasticsearch的SearchAPI,包括通过URI和请求体发送搜索参数的方式。重点讲解了Query DSL,如match_all、match、match_phrase、multi_match和bool等查询语法,特别是multi_match用于多字段匹配,以及如何利用bool进行复合查询和结果过滤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.SearchAPI

ES支持两种基本方式检索

  1. 一个是通过使用 REST request URI 发送搜索参数(uir+检索参数)
  2. 另一个是通过使用 REST request body 来发送它们(uri+请求体)

第一种: GET bank/_search?q=*&sort=account_number:asc
第二种:

GET bank/_search
{
	"query":{
			"match_all":{}
		},
	"sort":[
		{
			"account_number":"asc"
		},
		{
			"balacne":"desc"
		}	
   ]
}

2.Query DSL

1.基础语法格式
Elasticsearch 提供了一个可以执行查询的Json风格的DSL(domain-specific 领域特定语言)。这个被称为Query DSL。该查询语言非常全面,并且刚开始的时候感觉有点复杂,真正学号它的方法是从一些基础的示例开始的。

一个查询语句的典型结构:

{
	QUERY_NAME:{
		ARGUMENT:VALUE,
		ARGUMENT:VALUE,
		.....
	}
}

如果是针对某个字段,那么结构如下:

{
	QUERY_NAME:{
		FIELD_NAME:{
			ARGUMENT:VALUE,
			ARGUMENT:VALUE,
		.....
		}
	}
}

match_all

GET bank/_search
{
	"query":{
		"match_all":{}
},
"sort":[
		{
		"balance":{
				"order":"desc"
			}
		}
	]
}

搜索全部并且按照金额 降序排列

GET bank/_search
{
	"query":{
		"match_all":{}
},
"sort":[
		{
		"balance":{
				"order":"desc"
			}
		}
	]"from":0,  //从第0条开始
	"size":5
}

从第1页拿五条数据 类似分页

GET bank/_search
{
	"query":{
		"match_all":{}
},
"sort":[
		{
		"balance":{
				"order":"desc"
			}
		}
	]"from":0,  //从第0条开始
	"size":5"_source":["balance","firstname"] // 选择要返回的字段
}

match

如果是数字 可以精确查询

{
	"query":{
		"match":{
			"account_number":20	
		}
	}
}

如果是字符的话可以模糊查询

{
	"query":{
		"match":{
			"address":"Kings"	//全文检索  模糊查询
		}
	}
}

全文检索,会按照评分进行排序 ,会对检索条件进行分词匹配

match_phrase 【短语匹配】
将需要匹配的值当成一个整体单词(不分词)进行检索

GET bank/_search
{
	"query":{
		"match_phrase":{
				"address":"mill road"
		}	
	}
}

multi_match 【多字段匹配】

GET bank/_search
{
	"query":{
		"multi_match":{
			"query":"mill movico",
			"fields":["state","address"]
		}
}

}

bool【复合查询】
bool用来做复合查询:
复合语句可以合并 任何 其他查询语句,包括复合语句,了解这一点很重要,这就意味着,复合语句之间可以相互嵌套,可以表达非常复杂的逻辑

GET bank/_search
{
	"query":{
		"bool":{
			"must":[
				{
					"match":{
						"gender":"M"
					}
				},
				{
					"match":{
						"address":"mill"
					}
				}
			],
			"must_not":[
				{
					"match":{
						"age":"28"
					}
				}
			],
			"should":[
				{"match":{
						"lastname":"wallace"
					}	
				}
			]
		}
	}
}

filter结果过滤

请添加图片描述
term
和match一样,匹配某个属性的值。全文检索字段用match,其他非text字段匹配用term
请添加图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值