select 在 elasticsearch 中应用过滤器的单个字段

select a single field with applying filters in elasticsearch

我想 select ACCOUNT 的所有文件名字段值和 APPLICATION_NAME 假设 SQL 我需要这样做:

select filename.keyword from XXX where ACCOUNT='monitoring' and APPLICATION_NAME='webapp'

这是 kibana 界面中日志条目示例的屏幕截图

如果我理解正确,您希望在应用过滤器值 monitoringwebApp.

后查看名为 XXX 的索引中的所有字段

默认情况下,您无需像 Elasticsearch 那样执行任何操作,returns _source(其中包含文档中的所有值,即字段 JSON)。

示例:

索引示例文档

{
    "name": "foo",
    "title": "bar",
    "account" : "monitoring",
    "app" : "webapp"
}
{
    "name": "abc",
    "title": "def",
    "account" : "observe",
    "app" : "webapp"
}

并根据您的要求搜索查询(一些过滤器)。

{
    "query": {
        "bool": {
            "filter": [
                {
                    "term": {
                        "account": "monitoring"
                    }
                },
                {
                    "term": {
                        "app": "webapp"
                    }
                }
            ]
        }
    }
}

和搜索结果

"hits": [
            {
                "_index": "71614025",
                "_id": "1",
                "_score": 0.0,
                "_source": {
                    "name": "foo",
                    "title": "bar",
                    "account": "monitoring",
                    "app": "webapp"
                }
            }
        ]

注意搜索结果中的所有索引字段,位于搜索响应的命中部分下方。

选择特定字段的唯一值与 运行 SQL 数据库之一的聚合查询完全一样 例如


  • 通过 field.keyword 选择类似于传递枚举值,该枚举值应与该字段的现有值之一完全匹配。

  • 将大小设置为 0 将仅检索聚合结果,而不将其与源列表相关联。

  • 在我上面所说的聚合查询中,它针对可能是一个或多个的某些字段选择聚合函数之一

  • 如果它们是多个,这应该成为一个复合聚合。

  • 复合聚合需要在查询请求正文中指定composite.sources。

如果我想选择文件名和 POD_ID 个唯一值对,此查询对我有用。

{
          "size": "0",
          "aggs": {
            "custom_agg_name_whatever_you_want": {
              "composite": {
                "sources": [
                  {
                    "FILENAME": {
                      "terms": {
                        "field": "filename.keyword"
                      }
                    }
                  },
                  {
                    "POD_ID":{
                      "terms": {
                        "field": "POD_ID.keyword"
                      }
                    }
                  }
                ]
              }
            }
          },
          
          "query": {
            "bool": {
              "filter": [
                {
                  "bool": {
                    "filter": [
                      {
                        "bool": {
                          "should": [
                            {
                              "match_phrase": {
                                "ACCOUNT.keyword": "searchValue"
                              }
                            }
                          ],
                          "minimum_should_match": 1
                        }
                      },
                      {
                        "bool": {
                          "should": [
                            {
                              "match_phrase": {
                                "APPLICATION_NAME.keyword": "searchValue"
                              }
                            }
                          ],
                          "minimum_should_match": 1
                        }
                      }
                    ]
                  }
                },
                {
                  "range": {
                    "@timestamp": {
                      "format": "strict_date_optional_time",
                      "gte": "2022-03-21T09:09:09.277Z",
                      "lte": "2022-03-25T09:09:09.277Z"
                    }
                  }
                }
              ]
            }
          }
        
        }