elasticsearch 基于过滤器的Elasticsearch聚合计数
过去,我曾使用Solr进行过几个基于方面和过滤器的搜索,但我正在努力实现与Elasticsearch的对等 我知道聚合是根据查询结果计算的,如果没有指定查询,则是全局计算的。这很好,但是我希望这些聚合的计数基于过滤器的结果 在Solr中,这很简单-只需指定查询和过滤器-但使用Elasticsearch,过滤器对聚合没有影响,文档非常混乱 我希望以下查询的输出是将elasticsearch 基于过滤器的Elasticsearch聚合计数,elasticsearch,lucene,faceted-search,elasticsearch,Lucene,Faceted Search,过去,我曾使用Solr进行过几个基于方面和过滤器的搜索,但我正在努力实现与Elasticsearch的对等 我知道聚合是根据查询结果计算的,如果没有指定查询,则是全局计算的。这很好,但是我希望这些聚合的计数基于过滤器的结果 在Solr中,这很简单-只需指定查询和过滤器-但使用Elasticsearch,过滤器对聚合没有影响,文档非常混乱 我希望以下查询的输出是将建议bucket的范围设置为查询,但其中的结果计数的范围设置为指定的过滤器: { "size": 0, "query":
建议
bucket的范围设置为查询,但其中的结果计数的范围设置为指定的过滤器
:
{
"size": 0,
"query": {
"range": {
"published": {
"gte": "now-1y",
"lt": "now"
}
}
},
"filter": {
{
"term": {
"tag.id": "123"
}
},
{
"term": {
"tag.id": "456"
}
},
},
"aggs": {
"tags": {
"nested": {
"path": "tag"
},
"aggs": {
"suggestions": {
"terms": {
"field": "name",
"size": 10,
"min_doc_count": 1
},
"aggs": {
"id": {
"terms": {
"field": "id",
"size": 1
}
}
}
}
}
}
}
}
并给出了示例映射:
{
"mappings":{
"content":{
"properties":{
"id":{
"type":"string",
"index":"not_analyzed"
},
"title":{
"type":"string"
},
"byline":{
"type":"string",
"index":"not_analyzed"
},
"body":{
"type":"string"
},
"publishedDate":{
"type":"date",
"format":"dateOptionalTime"
},
"tag":{
"type":"nested",
"include_in_parent":true,
"properties":{
"id":{
"type":"integer"
},
"name":{
"type":"string"
}
}
}
}
}
}
}
非常感谢您的帮助。您可以通过以下方式获得预期的结果:
过滤器
部分(您拥有的实际上相当于后期过滤器
,并且仅在聚合运行后应用于结果)移动到过滤器
聚合中{
"size": 0,
"query": {
"range": {
"published": {
"gte": "now-1y",
"lt": "now"
}
}
},
"aggs": {
"tags": {
"nested": {
"path": "tag"
},
"aggs": {
"suggestions": {
"terms": {
"field": "tag.name",
"size": 10,
"min_doc_count": 1
},
"aggs": {
"filtered": {
"filter": {
"terms": {
"tag.id": [
"123",
"456"
]
}
},
"aggs": {
"id": {
"terms": {
"field": "tag.id",
"size": 1
}
}
}
}
}
}
}
}
}
}
您可以通过以下方式获得预期结果:
过滤器
部分(您拥有的实际上相当于后期过滤器
,并且仅在聚合运行后应用于结果)移动到过滤器
聚合中{
"size": 0,
"query": {
"range": {
"published": {
"gte": "now-1y",
"lt": "now"
}
}
},
"aggs": {
"tags": {
"nested": {
"path": "tag"
},
"aggs": {
"suggestions": {
"terms": {
"field": "tag.name",
"size": 10,
"min_doc_count": 1
},
"aggs": {
"filtered": {
"filter": {
"terms": {
"tag.id": [
"123",
"456"
]
}
},
"aggs": {
"id": {
"terms": {
"field": "tag.id",
"size": 1
}
}
}
}
}
}
}
}
}
}
你试过使用a吗?我试过了,但是我没能得到我期望的结果。我会进一步调查的。我不太明白你想做什么。你能解释一下吗?你试过使用a吗?我有,但我没能得到我预期的结果。我会进一步调查的。我不太明白你想做什么。你能解释一下吗?很酷,很高兴能帮上忙!很抱歉我有点早熟!不幸的是,此请求将导致所有计数为0。过滤器聚合是否应反转嵌套?您是否可以共享示例文档+您的映射,以便我可以重现该问题?添加了示例映射=]您是否还可以共享示例文档以及您对它的期望值。通过我使用的文档,我确实得到了计数。很酷,很高兴它有帮助!很抱歉我有点早熟!不幸的是,此请求将导致所有计数为0。过滤器聚合是否应反转嵌套?您是否可以共享示例文档+您的映射,以便我可以重现该问题?添加了示例映射=]您是否还可以共享示例文档以及您对它的期望值。通过我使用的文档,我确实得到了计数。