首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >match_only_text字段不支持排序和聚合弹性搜索

match_only_text字段不支持排序和聚合弹性搜索
EN

Stack Overflow用户
提问于 2022-05-03 14:13:57
回答 1查看 398关注 0票数 0

我想对match_only_text类型字段上发生的消息数量进行计数和排序。使用DSL查询,输出必须如下所示:

代码语言:javascript
运行
复制
{" Text message 1":615
" Text message 2":568
....}

所以我在基巴纳试试这个:

代码语言:javascript
运行
复制
 GET my_index_name/_search?size=0
{
  "aggs": {
    "type_promoted_count": {
      "cardinality": {
        "field": "message"
      }
    }
  }
}

然而,我得到了这个错误:

代码语言:javascript
运行
复制
"error" : {
    "root_cause" : [
      {
        "type" : "illegal_argument_exception",
        "reason" : "match_only_text fields do not support sorting and aggregations"
      }

我对“信息”领域感兴趣--这是它的映射:

代码语言:javascript
运行
复制
"message" : {
          "type" : "match_only_text"
        }

这是索引映射的一部分:

代码语言:javascript
运行
复制
"mappings" : {
      "_meta" : {
        "package" : {
          "name" : "system"
        },
        "managed_by" : "ingest-manager",
        "managed" : true
      },
      "_data_stream_timestamp" : {
        "enabled" : true
      },
      "dynamic_templates" : [
        {
          "strings_as_keyword" : {
            "match_mapping_type" : "string",
            "mapping" : {
              "ignore_above" : 1024,
              "type" : "keyword"
            }
          }
        }
      ],
      "date_detection" : false,
      "properties" : {
        "@timestamp" : {
          "type" : "date"
        }
.
.
.
        "message" : {
          "type" : "match_only_text"
        },
        "process" : {
          "properties" : {
            "name" : {
              "type" : "keyword",
              "ignore_above" : 1024
            },
            "pid" : {
              "type" : "long"
            }
          }
        },
        "system" : {
          "properties" : {
            "syslog" : {
              "type" : "object"
            }
          }
        }
      }
    }
  }
}

请帮帮忙

EN

回答 1

Stack Overflow用户

发布于 2022-05-03 14:41:39

是的,从设计上看,match_only_text属于text字段类型家族,因此不能在其上进行聚合。

你需要:

message.keyword类型映射中创建一个keyword子字段

代码语言:javascript
运行
复制
PUT my_index_name/_mapping
{
  "properties": {
    "message" : {
      "type" : "match_only_text",
      "fields": {
        "keyword": {
          "type" : "keyword"
        }
      }
    }
  }
}

更新整个索引(使用_update_by_query),以便填充子字段

代码语言:javascript
运行
复制
POST my_index_name/_update_by_query?wait_for_completion=false

然后,根据索引的大小,定期调用GET _tasks?actions=*byquery&detailed以检查任务的进度。

C.在该子字段上运行聚合。

代码语言:javascript
运行
复制
 POST my_index_name/_search
 {
  "size": 0,
  "aggs": {
    "type_promoted_count": {
      "cardinality": {
        "field": "message.keyword"
      }
    }
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72100755

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档