elasticsearch 基于过滤器的Elasticsearch聚合计数,elasticsearch,lucene,faceted-search,elasticsearch,Lucene,Faceted Search" /> elasticsearch 基于过滤器的Elasticsearch聚合计数,elasticsearch,lucene,faceted-search,elasticsearch,Lucene,Faceted Search" />

elasticsearch 基于过滤器的Elasticsearch聚合计数

elasticsearch 基于过滤器的Elasticsearch聚合计数,elasticsearch,lucene,faceted-search,elasticsearch,Lucene,Faceted Search,过去,我曾使用Solr进行过几个基于方面和过滤器的搜索,但我正在努力实现与Elasticsearch的对等 我知道聚合是根据查询结果计算的,如果没有指定查询,则是全局计算的。这很好,但是我希望这些聚合的计数基于过滤器的结果 在Solr中,这很简单-只需指定查询和过滤器-但使用Elasticsearch,过滤器对聚合没有影响,文档非常混乱 我希望以下查询的输出是将建议bucket的范围设置为查询,但其中的结果计数的范围设置为指定的过滤器: { "size": 0, "query":

过去,我曾使用Solr进行过几个基于方面和过滤器的搜索,但我正在努力实现与Elasticsearch的对等

我知道聚合是根据查询结果计算的,如果没有指定查询,则是全局计算的。这很好,但是我希望这些聚合的计数基于过滤器的结果

在Solr中,这很简单-只需指定查询和过滤器-但使用Elasticsearch,过滤器对聚合没有影响,文档非常混乱

我希望以下查询的输出是将
建议
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。过滤器聚合是否应反转嵌套?您是否可以共享示例文档+您的映射,以便我可以重现该问题?添加了示例映射=]您是否还可以共享示例文档以及您对它的期望值。通过我使用的文档,我确实得到了计数。