Kra*_*ash 45 filter querydsl elasticsearch
我是弹性搜索的新手,我在必须和过滤器之间感到困惑.我想在我的条款之间执行和操作,所以我这样做了
POST/xyz/_search
{
"query": {
"bool": {
"must": [
{
"term": {
"city": "city1"
}
},
{
"term": {
"saleType": "sale_type1"
}
}
]
}
}
}
Run Code Online (Sandbox Code Playgroud)
这给了我所需的结果匹配这两个术语,并使用这样的过滤器
POST/xyz/_search
{
"query": {
"bool": {
"must": [
{
"term": {
"city": "city1"
}
}
],
"filter": {
"term": {
"saleType": "sale_type1"
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我得到相同的结果,所以什么时候应该使用must,什么时候应该使用过滤器?有什么不同?
Vij*_*pta 55
must有助于得分.在filter,忽略查询的分数.
在这两个must和filter的条款(查询)必须出现在匹配文档.这是获得相同结果的原因.
您可以查看此链接
得分了
每个文档的相关性得分由称为的正浮点数表示
_score.越高_score,文档越相关.
查询子句_score为每个文档生成一个.
要了解如何计算得分,请参阅此链接
must返回每个匹配文档的分数。此分数可帮助您对匹配文档进行排名,并比较文档之间的相对相关性(使用每个文档的分数大小)。
由此,可以说,文件 1 的相关性是文件 2 的 3 倍。或者说,文件 1 至 7 的相关性比文件 8+ 及以后的相关性高得多。
关于相对分数的确定方法,您可以参考以下参考资料。
简而言之,它与文档中术语出现的次数、文档长度以及数据库索引中术语出现的平均次数有关。
filter不返回分数。只能说,所有匹配的文档都是相关的。但这无助于评估一个是否比另一个更相关。您可以将filter其视为must只有 2 个分数:零或非零,并且所有零分文档都会被删除。
filter如果您只想将属于主题“宠物”的所有文档列入白名单/黑名单,这会很有帮助。
总而言之,有 3 点可以帮助您决定何时使用什么:
must是您按相关性对文档进行比较/排名时的唯一选择filter如果你不关心分数/排名filter速度快很多,因为 Elasticsearch 不需要计算分数参考:
| 归档时间: |
|
| 查看次数: |
11844 次 |
| 最近记录: |