首页 > 解决方案 > 如何处理保存到结构非常多样化的 Elasticsearch 日志的情况?

问题描述

我的日志 POCO 有几个固定属性,例如用户 ID、时间戳,以及灵活的数据包属性,它是我想添加到日志中的任何类型的额外信息的 JSON 表示。这意味着属性名称可以是此数据包中的任何内容,这给我带来了 2 个问题:

  1. 如何配置映射,以便在索引期间将字符串类型的数据包属性映射到 JSON 对象,而不是被视为普通字符串?
  2. 由于数据包对象具有任意属性名称,这意味着整个文档类型内部可能包含大量属性,这会损害搜索性能吗?

标签: elasticsearch

解决方案


  1. 对于从字符串到 JSON 的数据转换,您可以使用带有 JSON 处理器的摄取管道: https ://www.elastic.co/guide/en/elasticsearch/reference/master/json-processor.html

  2. 这取决于您的查询。如果您使用“自由文本搜索”——是的,大量的字段会减慢查询速度。如果您将使用“字段”:“值”之类的查询 - 不,搜索中的字段编号没有问题。您可以在此处找到有关查询优化的其他信息: https ://www.elastic.co/guide/en/elasticsearch/reference/7.15/tune-for-search-speed.html#search-as-few-fields-as-可能的

问题是:什么时候说“巨大的数字”?1000?10000?10万?作为优化的一部分,我建议使用具有定义的动态模板:每个字符串字段作为“关键字”而不是文本+关键字自动摄取到索引中。此设置将字段数减少到一半。


推荐阅读