五、ElasticSearch高级查询

上一篇文章讲的是ES的增删改查,本篇我们一起来学习高级一点的查询语法。

首先预览一下ES的几种查询方式:

五、ElasticSearch高级查询_第1张图片

1、模糊匹配

restful API格式:http://localhost:9200/索引/_search

请求格式:POST

关键词:match

以上篇文章中book索引为例,模糊匹配title字段:

{
	"query":{
		"match":{
			"title":"ElasticSearch入门"
		}
	}
}

匹配结果:

五、ElasticSearch高级查询_第2张图片

从结果中可以看出ES的模糊匹配是分词模糊匹配,我们输入“ElasticSearch入门”,只要含有“入门”和“ElasticSearch”的数据全都匹配出来了。那如果我们想要实现mysql的那种模糊匹配怎么做呢?我们可以用其余匹配。

2、其余匹配

restful API格式:http://localhost:9200/索引/_search

请求格式:POST

关键词:match_phrase

{
	"query":{
		"match_phrase":{
			"title":"ElasticSearch入门"
		}
	}
}

匹配结果:

五、ElasticSearch高级查询_第3张图片

此时便做到了mysql中的模糊匹配。

3、多个字段查询 

restful API格式:http://localhost:9200/索引/_search

请求格式:POST

关键词:multi_match

{
	"query":{
		"multi_match":{
			"query":"王宝宝",
			"fields":["author","title"]
		}
	}
}

匹配结果:

五、ElasticSearch高级查询_第4张图片

title和author只要是包含“王宝宝”的数据都查询出来。

4、语法查询

restful API格式:http://localhost:9200/索引/_search

请求格式:POST

关键词:query_string

{
	"query":{
		"query_string":{
			"query":"(ElasticSearch and python) or 王宝宝"
		}
	}
}

所有字段只要包含 ElasticSerach python 王宝宝数据的都查询出来。

5、字段级别查询

restful API格式:http://localhost:9200/索引/_search

请求格式:POST

关键词:term

{
	"query":{
		"term":{
			"word_count":4000
		}
	}
}

查询结果为word_count=4000的数据。

6、范围查询

restful API格式:http://localhost:9200/索引/_search

请求格式:POST

关键词:range

{
	"query":{
		"range":{
			"word_count":{
				"gte":1000,
				"lte":2000
			}
		}
	}
}

结果为查询1000到2000字数的书籍,gte:大于等于 gt:大于 lte:小于等于 lt:小于。

7、Filter context查询

restful API格式:http://localhost:9200/索引/_search

请求格式:POST

关键词:bool、filter

Filter和上面的几种Query查询的区别:

1、Filter匹配结果只有Yes 或 No。Query除了查询数据外,还会对数据结果进行分数评估,计算命中率。

2、Filter顾名思义就是过滤数据,同时还会对数据做缓存,所以比Query速度要快一些。

{
	"query":{
		"bool":{
			"filter":{
				"term":{
					"word_count":1000
				}
			}
		}
	}
}

8、固定分数查询

restful API格式:http://localhost:9200/索引/_search

请求格式:POST

关键词:constant_score、boost

ES的查询结果中会有_score的分数,通过固定分数查询,可以筛选指定的分数。

 {
 	"query":{
 		"constant_score":{
 			"filter":{
 				"match":{
 					"title":"ElasticSearch"
 				}
 			},
 			"boost":2
 		}
 	}
 }

9、布尔查询

restful API格式:http://localhost:9200/索引/_search

请求格式:POST

关键词:bool、should

匹配所有author=王宝宝 或者 title=ElasticSearch的数据

{
	"query":{
		"bool":{
			"should":[
				{
					"match":{
						"author":"王宝宝"
					}
				},{
					"match":{
						"title":"ElasticSearch"
					}
				}
			]
		}
	}
}

匹配所有author=王宝宝 并且 title=ElasticSearch的数据:

关键词:must

{
	"query":{
		"bool":{
			"must":[
				{
					"match":{
						"author":"王宝宝"
					}
				},{
					"match":{
						"title":"ElasticSearch"
					}
				}
			]
		}
	}
}

匹配author != 王宝宝的数据:

关键词:must_not

{
	"query":{
		"bool":{
			"must_not":[
				{
					"match":{
						"author":"王宝宝"
					}
				}
			]
		}
	}
}

 

你可能感兴趣的:(elasticsearch,Ëlasticsearch)