Nest - ElasticSearch.Net - 如何拆分搜索返回的 FacetFilter 命中数 属性
Nest - ElasticSearch.Net - How do I split the FacetFilter hit count returned by a search property
我有一个 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 从我的查询中返回命中总数。我想在搜索请求中使用 属性 拆分这些匹配项。因此,在搜索请求中我有一个整数列表。我想知道该列表中每个整数返回了多少匹配。
我希望这是有道理的。
我试过添加一个 FacetTerm,这为我提供了 int 查询值的每个值的总命中数,而不仅仅是与搜索相关的那些。我了解查询、过滤阶段,并尝试相应地更改描述符,但没有成功。
谢谢。
有几种方法可以做到这一点。我的建议是使用过滤查询,然后在结果上使用 Terms 聚合或分面(分面已被弃用,因此我建议远离那些)。
聚合:
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 版本,格式可能会有所不同。
我有一个 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 从我的查询中返回命中总数。我想在搜索请求中使用 属性 拆分这些匹配项。因此,在搜索请求中我有一个整数列表。我想知道该列表中每个整数返回了多少匹配。
我希望这是有道理的。
我试过添加一个 FacetTerm,这为我提供了 int 查询值的每个值的总命中数,而不仅仅是与搜索相关的那些。我了解查询、过滤阶段,并尝试相应地更改描述符,但没有成功。
谢谢。
有几种方法可以做到这一点。我的建议是使用过滤查询,然后在结果上使用 Terms 聚合或分面(分面已被弃用,因此我建议远离那些)。
聚合:
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 版本,格式可能会有所不同。