0. 准备好数据
"hits": [
{
"_index": "pigg",
"_type": "_doc",
"_id": "1",
"_score": null,
"_source": {
"name": "盐城冬冬",
"age": 30,
"hometown": "盐城",
"gender": "male",
"interesting": "watching TV"
},
"sort": [
"1"
]
},
{
"_index": "pigg",
"_type": "_doc",
"_id": "2",
"_score": null,
"_source": {
"name": "珣爷",
"age": 28,
"hometown": "徐州",
"gender": "female",
"interesting": "watching movie"
},
"sort": [
"2"
]
},
{
"_index": "pigg",
"_type": "_doc",
"_id": "3",
"_score": null,
"_source": {
"name": "米可",
"age": 1,
"hometown": "苏州",
"gender": "female"
},
"sort": [
"3"
]
}
]
1. 查询部分字段
GET /pigg/_search
{
"_source": ["name", "age"]
}
2. match
#查询interesting匹配"watching TV"
GET /pigg/_search
{
"query": {
"match": {
"interesting": "watching TV"
}
}
}
返回如下:
"hits": [
{
"_index": "pigg",
"_type": "_doc",
"_id": "1",
"_score": 0.5753642,
"_source": {
"name": "盐城冬冬",
"age": 30,
"hometown": "盐城",
"gender": "male",
"interesting": "watching TV"
}
},
{
"_index": "pigg",
"_type": "_doc",
"_id": "2",
"_score": 0.2876821,
"_source": {
"name": "珣爷",
"age": 28,
"hometown": "徐州",
"gender": "female",
"interesting": "watching movie"
}
}
]
看到结果也返回了"interesting"= "watching movie"的数据, 其中id=1的_score要比id=2的要高,
这个说明是匹配的程度,id=1的要比id=2的更加匹配
#查询interesting匹配"TV"或者"moive"
GET /pigg/_search
{
"query": {
"match": {
"interesting": "TV movie"
}
}
}
返回结构如下:
"hits": {
"total": 2,
"max_score": 0.2876821,
"hits": [
{
"_index": "pigg",
"_type": "_doc",
"_id": "2",
"_score": 0.2876821,
"_source": {
"name": "珣爷",
"age": 28,
"hometown": "徐州",
"gender": "femal",
"interesting": "watching movie"
}
},
{
"_index": "pigg",
"_type": "_doc",
"_id": "1",
"_score": 0.2876821,
"_source": {
"name": "盐城冬冬",
"age": 30,
"hometown": "盐城",
"gender": "male",
"interesting": "watching TV"
}
}
]
上面结果命中了2个人, "_score"都是0.2876821,说明匹配度两者相同
#查询age=30的
GET /pigg/_search
{
"query": {
"match": {
"age": 30
}
}
}
3. match_phrase
#短语查询,这个会将"watching TV"作为一个短语去进行匹配查询
GET /pigg/_search
{
"query": {
"match_phrase": {
"interesting": "watching TV"
}
}
}
返回结果如下:
"hits": [
{
"_index": "pigg",
"_type": "_doc",
"_id": "1",
"_score": 0.5753642,
"_source": {
"name": "盐城冬冬",
"age": 30,
"hometown": "盐城",
"gender": "male",
"interesting": "watching TV"
}
}
]
4.must
查询interesting匹配"watching TV",并且gender匹配"female"
GET /pigg/_search
{
"query": {
"bool": {
"must": [
{ "match": { "interesting": "watching TV" }},
{ "match": {"gender": "female" }}
]
}
}
}
返回结果如下:
"hits": [
{
"_index": "pigg",
"_type": "_doc",
"_id": "2",
"_score": 0.5753642,
"_source": {
"name": "珣爷",
"age": 28,
"hometown": "徐州",
"gender": "female",
"interesting": "watching movie"
}
}
]
{ “match”: { “interesting”: “watching TV” }}这条件语句能返回id=1或2的数据
{ “match”: {“gender”: “female” }}这条件语句能返回id=2或3的数据
这两条语句是且的关系,所有最后返回id=2的数据
5. should
5.1查询interesting匹配"watching mobile",或gender匹配"female"
#查询interesting匹配"watching mobile",或gender匹配"female"
GET /pigg/_search
{
"query": {
"bool": {
"should": [
{ "match": { "interesting": "watching mobile" }},
{ "match": {"gender": "female" }}
]
}
}
}
返回结果如下:
"hits": [
{
"_index": "pigg",
"_type": "_doc",
"_id": "2",
"_score": 0.5753642,
"_source": {
"name": "珣爷",
"age": 28,
"hometown": "徐州",
"gender": "female",
"interesting": "watching movie"
}
},
{
"_index": "pigg",
"_type": "_doc",
"_id": "1",
"_score": 0.2876821,
"_source": {
"name": "盐城冬冬",
"age": 30,
"hometown": "盐城",
"gender": "male",
"interesting": "watching TV"
}
},
{
"_index": "pigg",
"_type": "_doc",
"_id": "3",
"_score": 0.2876821,
"_source": {
"name": "米可",
"age": 1,
"hometown": "苏州",
"gender": "female"
}
}
]
从上面结果看,id=2的数据匹配得分最高,另外两个匹配度相同
注意这次查询的是"watching mobile",不是"watching TV"
5.2 minimum_should_match
这个是指或的条件,必须满足多少条,下面的minimum_should_match=2,所以一条都查不到
GET /pigg/_search
{
"query": {
"bool": {
"should": [
{
"range": {
"age": {
"gte": 0,
"lte": 3
}
}
},
{
"match": { "hometown.keyword": "徐州" }
}
],
"minimum_should_match": 2
}
}
}
6. must_not
查询interesting不匹配 “watching TV”,
并且
gender不匹配 “female”
GET /pigg/_search
{
"query": {
"bool": {
"must_not": [
{ "match": {"interesting": "watching movie"} },
{ "match": {"gender": "female"} }
]
}
}
}
查询结果是空的,没有匹配的数据
7. 组合多查询
用SQL表示如下
where gender != ‘male’ and ( (age >= 0 and age <= 3) or hometown = ‘徐州’ )
GET /pigg/_search
{
"query": {
"bool": {
"must_not": [
{
"match": {
"gender": "male"
}
}
],
"should": [
{
"range": {
"age": {
"gte": 0,
"lte": 3
}
}
},
{
"match": {
"hometown.keyword": "徐州"
}
}
]
}
}
}
返回结果如下:
"hits": [
{
"_index": "pigg",
"_type": "_doc",
"_id": "3",
"_score": 1,
"_source": {
"name": "米可",
"age": 1,
"hometown": "苏州",
"gender": "female"
}
},
{
"_index": "pigg",
"_type": "_doc",
"_id": "2",
"_score": 0.2876821,
"_source": {
"name": "珣爷",
"age": 28,
"hometown": "徐州",
"gender": "female",
"interesting": "watching movie"
}
}
]
8.不影响评分的filter
如果不希望age的比较影响评分,可以放到filter里
GET /pigg/_search
{
"query": {
"bool": {
"must": [
{
"match": {"interesting": "watching TV"}
}
],
"filter": {
"range": {
"age": {
"gte": 10,
"lte": 29
}
}
}
}
}
}
---------------------
作者:盐城三爷
来源:CSDN
原文:https://blog.csdn.net/winterking3/article/details/82896738
版权声明:本文为博主原创文章,转载请附上博文链接!