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": "湘潭市" } } ] } } }