elasticsearch - 如何处理保存到结构非常多样化的 Elasticsearch 日志的情况?
问题描述
我的日志 POCO 有几个固定属性,例如用户 ID、时间戳,以及灵活的数据包属性,它是我想添加到日志中的任何类型的额外信息的 JSON 表示。这意味着属性名称可以是此数据包中的任何内容,这给我带来了 2 个问题:
- 如何配置映射,以便在索引期间将字符串类型的数据包属性映射到 JSON 对象,而不是被视为普通字符串?
- 由于数据包对象具有任意属性名称,这意味着整个文档类型内部可能包含大量属性,这会损害搜索性能吗?
解决方案
对于从字符串到 JSON 的数据转换,您可以使用带有 JSON 处理器的摄取管道: https ://www.elastic.co/guide/en/elasticsearch/reference/master/json-processor.html
这取决于您的查询。如果您使用“自由文本搜索”——是的,大量的字段会减慢查询速度。如果您将使用“字段”:“值”之类的查询 - 不,搜索中的字段编号没有问题。您可以在此处找到有关查询优化的其他信息: https ://www.elastic.co/guide/en/elasticsearch/reference/7.15/tune-for-search-speed.html#search-as-few-fields-as-可能的
问题是:什么时候说“巨大的数字”?1000?10000?10万?作为优化的一部分,我建议使用具有定义的动态模板:每个字符串字段作为“关键字”而不是文本+关键字自动摄取到索引中。此设置将字段数减少到一半。
推荐阅读
- python - Assign values to different index positions as the actual in a loop python
- java - 如何将时间“0000-00-00 00:00:00”设置为 LocalDateTime?
- python - Jupyter markdown: Curly brace symbole doesn't show correctly
- java - Use onActivityResult to call a function
- java - 选择相同位置时禁用动画底部导航
- python - 为什么在终端上安装 xlwings 会产生错误?
- php - 流明存储图像错误:路径超出定义的根
- android - 推送后使用本地历史记录还原更改?
- android - 如何在 FireStore 文档中获取对 Geopoint 字段的引用?
- php - PHP rdkafka。如何消费主题匹配正则表达式?