0
点赞
收藏
分享

微信扫一扫

Elasticsearch进阶检索

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
请添加图片描述

举报

相关推荐

0 条评论