Boosting query、Boolean query
Boosting query
返回与positive匹配的文档,同时减少与negative查询匹配的文档的相关性得分。
可以使用boosting 查询降级某些文档,而不将它们从搜索结果中排除。
GET /_search { "query": { "boosting": { "positive": { "term": { "text": "apple" } }, "negative": { "term": { "text": "pie tart fruit crumble tree" } }, "negative_boost": 0.5 } } }
positive
(不能为空)您希望运行的查询。任何返回的文档都必须匹配此查询。
nagative
(不能为空)用来降低匹配到的文档的相关性得分的查询。
如果返回的文档匹配positive查询和此查询,boosting查询将计算该文档的最终相关性得分,如下所示:
从positive查询中取原始的相关性分数,将分数乘以negative_boost值。
negative_boost
(Required, float) 0到1.0之间的浮点数,用于降低与negative查询匹配的文档的相关性得分。
例如上面例子:
positive:查询“text”字段中,所有包含“apple”的文档。
negative:查询“text”字段中,所有包含“pie tart fruit crumble tree”的文档。
当返回结果后,同时匹配positive和negative的文档得分=positive部分的原始得分*0.5
通过这种方法,可以对查询结果进行排序,降低我们指定内容的得分。
Boolean query
1、bool子句组成:
bool查询映射到Lucene BooleanQuery。它是使用一个或多个布尔子句构建的,每个子句都有一个类型发生。发生类型为:
- must:返回的文档必须满足must子句的条件,并且参与计算分值。
- filter:根据filter条件,过滤掉返回的文档,不参与分值计算。
- should:返回可能包含查询条件的文档。并且当有多个should时,只要有一个should子句条件满足,就会返回对应的结果。
- must_not:满足子句中条件的记录将不返回。
bool查询采用了“更多匹配即更好”的方法,因此每个匹配的must或should子句的得分将被加在一起,以提供每个文档的最终_score。
2、使用minimum_should_match
可以使用minimum_should_match参数指定返回的文档必须匹配的should子句的数量或百分比。
如果bool查询至少包含一个should子句,没有must或filter子句,则默认值为1。否则,默认值为0。
3、 bool.filter子句对分数的影响
filter子句下指定的查询对评分没有影响。分数只受指定的查询的影响。例如,以下三个查询都返回status字段包含术语active的所有文档。
1)第一个查询为所有文档分配0分,因为没有指定评分查询:
GET _search { "query": { "bool": { "filter": { "term": { "status": "active" } } } } }
2)这个bool查询有一个match_all查询,它为所有文档分配1.0分。
GET _search { "query": { "bool": { "must": { "match_all": {} }, "filter": { "term": { "status": "active" } } } } }
3)这个constant_score查询的行为与上面第二个例子完全相同。constant_score查询为过滤器匹配的所有文档分配1.0分。
GET _search { "query": { "constant_score": { "filter": { "term": { "status": "active" } } } } }
4、给查询取名
每个查询在其顶级定义中接受一个_name。您可以使用命名查询来跟踪哪些查询与返回的文档匹配。如果使用命名查询,则响应为每次命中包含matched_queries属性。
GET /_search { "query": { "bool": { "should": [ { "match": { "name.first": { "query": "shay", "_name": "first" } } }, { "match": { "name.last": { "query": "banon", "_name": "last" } } } ], "filter": { "terms": { "name.last": [ "banon", "kimchy" ], "_name": "test" } } } } }
浙公网安备 33010602011771号