如何从Elasticsearch的过滤器中获取所有文档?

问题描述 投票:1回答:1

如果我提供空的参数(见下文),我想从Elasticsearch中获取所有文档。我怎样才能实现这个目标呢?

一种解决方案是,我可以将所有现有的类别写进一个数组。但我有超过100个类别,这将不是一个好的解决方案。

谁能帮帮我?如果数组为空,是否可以忽略术语?

POST _scripts/test{"script": {
"lang": "mustache",
"source": {
  "query": {
    "bool": {
      "must": {
        "match_all": {}
      },
      "filter": {
        "terms": {
          "category": [
            "{{#category}}",
            "{{.}}",
            "{{/category}}"
          ]}}}}}}}

如果我执行下面的查询,结果将是空的。

GET poi/_search/template{
"id": "test", 
"params": {
    "category" : [""]
}}
elasticsearch mustache is-empty elasticsearch-query elasticsearch-template
1个回答
1
投票

实现这个目标的最好方法是像这样使用 JSON数组:

POST _scripts/test
{
  "script": {
    "lang": "mustache",
    "source": """
    {
      "query": {
        "bool": {
          "must": {
            "match_all": {}
          },
          "filter": [
            {{#category}}
            {
              "terms": {
                "category": {{#toJson}}category.values{{/toJson}}
              }
            }
            {{/category}}
          ]
        }
      }
    }
    """
  }
}

那么你可以像这样执行这个搜索模板。

GET poi/_search/template
{
  "id": "test", 
  "params": {
    "category" : {
      "values": ["cat1", "cat2", "cat3"]
    }
  }
}

如果你不想指定任何类别,像这样:

GET poi/_search/template
{
  "id": "test", 
  "params": {
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.