gpt4 book ai didi

c# - Nest-ElasticSearch.Net-如何分割搜索属性返回的FacetFilter命中计数

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

我有一个NEST查询;

            var desciptor  = new SearchDescriptor<SomePoco>()
.TrackScores()
.From(request.Page == 1 ? 0 : (request.Page - 1) * request.PageSize)
.Size(request.PageSize)
.MatchAll()
.FacetFilter("some_name", a => new FilterContainer(new AndFilter { Filters = CreatePocoSearchFilter(request) }))
.SortDescending("_score");


var results = _client.Search<SomePoco>(x => descriptor);

FacetFilter从我的查询返回HITS的总数。我想使用搜索请求中的属性来拆分这些匹配。因此,在搜索请求中,我有一个整数列表。我想知道该列表中每个int返回的匹配数。

我希望这是有道理的。

我尝试添加一个FacetTerm,这为我提供了int查询值的每个值的命中总数,而不仅仅是与搜索有关的命中总数。我了解查询,过滤器阶段,并尝试相应地更改描述符,但是没有运气。

谢谢。

最佳答案

有几种方法可以做到这一点。我的建议是使用过滤的查询,然后对结果使用术语汇总或构面(不建议使用构面,因此建议您不要使用这些构面)。

使用汇总:

POST /_search
{
"query": {
"filtered": {
"query": { "match_all": {}},
"filter": {
"terms": {
"<FIELD_NAME>": [1, 2, 3, 42]
}
}
}
},
"aggs": {
"countOfInts": {
"terms": {
"field": "<FIELD_NAME>",
"size": 10
}
}
}
}

具有方面:
POST /_search
{
"query": {
"filtered": {
"query": { "match_all": {}},
"filter": {
"terms": {
"<FIELD_NAME>": [1, 2, 3, 42]
}
}
}
},
"facets": {
"countOfInts": {
"terms": {
"field": "<FIELD_NAME>",
"size": 10
}
}
}
}

您也可以通过使用 match_all进行普通查询,然后在构面或聚合内进行过滤来执行相同的操作。我在上面列出的方式的性能会更好一些,因为它将在构建agg / facet之前减少工作集。

我没有包含NEST的代码,因为根据所使用的dll版本,格式可能有所不同。

关于c# - Nest-ElasticSearch.Net-如何分割搜索属性返回的FacetFilter命中计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28941157/

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