首页 > 解决方案 > 编写一个查询而不是四个查询

问题描述

亲爱的,

我在编写正确的复杂查询时遇到问题。我尝试编写一个查询,该查询将与其他四个查询相同:计算代码为 1 的文档?还是2??在 ci.rc 字段中并计数具有代码 9 的文档?在 ci.rc 字段中并计算代码为 0 的文档?在 ci.rc 字段中,在 ci.mti 字段中具有代码 1210 或 1230,并在 ci.mti 字段中计数具有代码 1400 或 1420 的文档

您能否建议我如何编写一个查询,该查询将与四个单独的查询相同,好吗?有什么建议吗?请。

我的一个查询的骨架:

GET /log-2020.07.08/_search?size=0
{
  "query": {
    "bool": {
      "should": [
        {
          "query_string": {
            "default_field": "ci.rc",
            "query": "(1??) or (2??)"
          }
        },
        {
          "query_string": {
            "default_field": "ci.rc",
            "query": "(9??)"
          }
        },
        {
          "bool": {
            "must": [
              {
                "regexp": {
                  "ci.rc": "0[0-9]{2}"
                }
              },
              {
                "regexp": {
                  "ci.mti": "[0-9]{2}[3|5|7|9][0-9]{1}"
                }
              }
            ]
          }
        }
      ]
      }
    },
    "aggs": {
      "rc": {
        "terms": {"field": "ci.rc.keyword","size": 10}
      }
    }
  }

缺少日期条件和最后一个单独的查询:count docs which has code 1400 or 1420 in field ci.mti

问候,丹

标签: elasticsearch

解决方案


查询字符串查询仅适用于这些用例。在查询字符串查询中,您可以以字符串格式编写每个查询

这里可以是细化的查询

GET /log-2020.07.08/_search?size=0

{
  "query": {
    "query_string": {
      "query": "(ci.rc:((1??) or (2??) or (9??))) and (ci.rc:/0[0-9]{2}/) and ci.mti:/[0-9]{2}[3|5|7|9][0-9]{1}/"
    }
  }
}

这里还有一个链接,其语法用于将几乎每种类型的查询放入查询字符串中

https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-query-string-query.html


推荐阅读