gpt4 book ai didi

elasticsearch - 用于ElasticSearch的NEST过滤器

转载 作者:行者123 更新时间:2023-12-02 22:17:26 25 4
gpt4 key购买 nike

我正在使用NEST查询ElasticSearch,并且正在寻找创建条件过滤器。我需要查询以匹配类别以及可选的标题和章节字段。我正在汇总以获取唯一值。问题在于过滤器似乎对过滤器字段执行“或”操作。有什么想法我在这个例子中做错了吗?

FilterContainer filter = new FilterContainer();

filter = Filter<Page>.Term("category", "1575");

if (title != null)
{
filter &= Filter<Page>.Term("title", title);
}

if (chapter != null)
{
filter &= Filter<Page>.Term("chapter", chapter);
}

var result = client.Search<Page>(s => s
.Index(index)
.Filter(filter)
.Size(0)
.Aggregations(a => a
.Terms("my_agg", st => st
.Field("title")
)
)
);

var myAgg = result.Aggs.Terms("my_agg");
IList<KeyItem> lst = myAgg.Items;
return lst;

最佳答案

这将为您提供所有行的结果,因为您的过滤器根本不会用于聚合。因此,看来过滤器正在执行“或”运算。根据您的要求,您需要使用过滤器聚合,其中在聚合内部指定了过滤器。请查看http://www.elasticsearch.org/guide/en/elasticsearch/reference/master/search-aggregations-bucket-filter-aggregation.html以获取更多信息。

出于您的目的,以下是用于创建搜索请求和处理响应的更新代码。

var result = client.Search<Page>(s => s
.Index(index)
.Size(0)
.Aggregations(fa => fa
.Filter("filtered_aggs", f => f
.Filter(fd => filter)
.Aggregations(ta => ta
.Terms("my_agg", st => st
.Field("title")
)
)
)
)
)
);

var myAgg = result.Aggs.Nested("filtered_aggs").Terms("my_agg");
IList<KeyItem> lst = myAgg.Items;
return lst;

关于elasticsearch - 用于ElasticSearch的NEST过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26108333/

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