如果我在elasticsearch的filter子句中使用query呢?es会计算分数吗?例如,案例1:
{
"query": {
"bool": {
"filter": {
"bool":{
"should":{
}
}
}
}
}
}
案例2:
{
"query": {
"bool": {
"should": {
"bool":{
"filte":{
}
}
}
}
}
}
es会计算这两种情况下的分数吗?
2条答案
按热度按时间a64a0gku1#
在elasticsearch中,filter部分下的每个查询都不会参与分数计算。这意味着在两个查询中,如果在过滤器中添加逻辑,elasticsearch将不会计算分数。但是如果你在“必须”、“应该”或“不应该”部分添加了部分逻辑,elasticsearch将计算分数。
x4shl7ld2#
筛选子句(查询)必须出现在匹配的文档中。但是,与must不同的是,查询的分数将被忽略。filter子句是在filter上下文中执行的,这意味着评分被忽略,子句被考虑用于缓存。
请参阅有关bool查询的elasticsearch文档,以了解更多信息
添加索引数据、搜索查询和搜索结果的工作示例
索引数据:
搜索查询1:
在这种情况下
bool
查询被 Package 在外部filter
子句,所以should
忽略子句搜索结果1:
搜索查询2:
在这种情况下,内部bool查询被 Package 在
filter
子句,所以外部bool should
条款,不会对分数产生任何影响搜索结果2:
所以两个搜索查询都将返回一个
0.0
分数,表示由于filter
条款