在must中添加查询过滤器和将查询过滤器和must分开有什么区别?
我需要应用一个过滤器查询来搜索,但这两个查询中的任何一个对我来说都是一样的。我想知道有没有什么不同。
案例1:
"query": {
"bool": {
"must": [
{
"term": {
"field": {
"value": "VALUE"
}
}
},
{
"bool": {
"filter": [
{
"script": {
"script": {
"source": """
return true;
"""
}
}
}
]
}
}
]
}
}
案例2:
"query": {
"bool": {
"must": [
{
"term": {
"field": {
"value": "VALUE"
}
}
}
],
"filter": [
{
"script": {
"script": {
"source": """
return true;
"""
}
}
}
]
}
}
我认为他们没有什么不同,但我需要推荐人。问候语。
2条答案
按热度按时间k0pti3hp1#
它们的工作原理完全相同,第二种语法更可取,因为它不像第一种那样嵌套,更易于阅读。
h79rfbju2#
两个查询的工作方式完全相同
有关布尔查询的更多信息,请参阅文档
must:子句(query)必须出现在匹配的文档中,并且将对得分起作用。
筛选器:子句(查询)必须出现在匹配的文档中。但是,查询的分数将被忽略。filter子句是在filter上下文中执行的,这意味着评分被忽略,子句被考虑用于缓存。
组合了多个bool查询的第一个查询的结构:
包含单个布尔查询的第二个查询的结构:
如您所见,在这两个搜索查询中,只有在满足术语查询和脚本查询条件时,文档才会匹配