elasticsearch 复合查询:bool&boosting
1. bool查询
复合过滤器,将多个查询条件,用一定的逻辑组合在一起
- must:所有条件,用must组合在一起,表示And
- must_not:将must_not中的条件,全部都不能匹配,标识Not
- should:所有条件,用should组合在一起,标识Or
#测试--bool查询
POST /king_test_person/_search
{
"query": {
"bool": {
"must": [
{
"term": {
"name": {
"value": "王五"
}
}
},
{
"term": {
"nationality": {
"value": "汉"
}
}
}
],
"must_not": [
{
"term": {
"sex": {
"value": "女"
}
}
}
],
"should": [
{
"match": {
"address": "湖南"
}
},
{
"match": {
"address": "湘潭市"
}
}
]
}
}
}
2. boosting查询
boosting查询可以影响查询后的score
- positive:只有匹配上positive的查询内容,才会被返回到结果集
- negative:如果匹配上positive并且匹配上negative,就可以降低文档的score
- negative_boost:指定系数,必须 < 1.0
关于查询时,分数时如何计算的:
- 搜索的关键字在文档中出现的频次越高,分数就越高
- 指定文档内容越短,分数就越高
- 在搜索时,指定的关键字也会被分词,这个被分词的内容,被分词库匹配的个数越多,分数越高
#测试--bool查询
POST /king_test_person/_search
{
"query": {
"bool": {
"must": [
{
"term": {
"name": {
"value": "王五"
}
}
},
{
"term": {
"nationality": {
"value": "汉"
}
}
}
],
"must_not": [
{
"term": {
"sex": {
"value": "女"
}
}
}
],
"should": [
{
"match": {
"address": "湖南"
}
},
{
"match": {
"address": "湘潭市"
}
}
]
}
}
}

浙公网安备 33010602011771号