我向ElasticSearch发出几个查询,以便按关键字检索文档(我按代码或内部ID匹配)。我不太关心这些查询中的评分,只是检索文档。
将我在constant_score过滤器中使用的bool查询包装起来会提高性能,还是有意义?
答案 0 :(得分:1)
没有意义。如果您使用bool查询,则可以对其应用过滤器。
GET /_search
{
"query": {
"bool": {
"must": [
{ "match": { "title": "Search" }},
{ "match": { "content": "Elasticsearch" }}
],
"filter": [
{ "term": { "status": "published" }},
{ "range": { "publish_date": { "gte": "2015-01-01" }}}
]
}
}
}
过滤器 - 子句(查询)必须出现在匹配的文档中。然而,与必须不同的是,查询的分数将被忽略。过滤器子句在过滤器上下文中执行,这意味着忽略评分并考虑使用子句进行高速缓存。
应该使用更多constant_score
进行评分,因此如果匹配,请将“boost
”值应用为分数。
总结:当你需要得分
时,使用filter for filter和constant_score