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 界面中日志条目示例的屏幕截图
如果我理解正确,您希望在应用过滤器值 monitoring
和 webApp
.
后查看名为 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"
}
}
}
]
}
}
}
我想 select ACCOUNT 的所有文件名字段值和 APPLICATION_NAME 假设 SQL 我需要这样做:
select filename.keyword from XXX where ACCOUNT='monitoring' and APPLICATION_NAME='webapp'
这是 kibana 界面中日志条目示例的屏幕截图
如果我理解正确,您希望在应用过滤器值 monitoring
和 webApp
.
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"
}
}
}
]
}
}
}