gpt4 book ai didi

elasticsearch - ElasticSearch中的BoolFilter和BoolQuery

转载 作者:行者123 更新时间:2023-12-02 23:35:48 24 4
gpt4 key购买 nike

我将两个搜索请求应用于一个过滤器和一个查询,它们在语义上是相同的,如下所示:

static FilterBuilder filter(String field1Value, String field2Value){
return FilterBuilders.boolFilter().must(FilterBuilders.termFilter("field1",field1Value)).should(FilterBuilders.termFilter("field2",field2Value));
}
static QueryBuilder query(String field1Value, String field2Value){
return QueryBuilders.boolQuery().must(QueryBuilders.termQuery("field1",field1Value)).should(QueryBuilders.termQuery("field2",field2Value));
}
client.prepareSearch(indexName).setPostFilter(filter("hello", "world")).setTypes("mytype");
client.prepareSearch(indexName).setQuery(query("hello","world")).setTypes("mytype");

但是,尽管使用查询进行搜索会返回结果,但是使用过滤器进行搜索不会返回任何结果。两者不应该表现得一样吗?如果不一样,为什么?

最佳答案

它们并不完全相同。
在带有must子句的 bool(boolean) 查询中,如果查询中没有明确的minimum_should_match,则如果不匹配其中的任何子句,则文档将为匹配项。

在过滤 bool(boolean) 查询中,至少需要满足一个should子句才能将文档视为匹配项。在过滤器中,没有minimum_should_match选项,可以将其视为始终设置为1。

即对于过滤器,它可以如下所示

 [must_clause] && [should_clause1 || should_clause_2]

对于OP中的示例:

1)当且仅当它们匹配must子句中的field1条件和should子句中的field2条件时,文档才会通过过滤器。

2)对于 bool(boolean) 查询,如果满足必须条款,即field1匹配,则将文档视为匹配就足够了

关于elasticsearch - ElasticSearch中的BoolFilter和BoolQuery,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31253795/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com