Elasticsearch 映射:对本质上是关键字的属性使用类型文本是否有缺点?
Elasticsearch mapping: is there a disadvantage in using type text for properties which are keyword by nature?
我的堆栈:
Elasticsearch 5.4(有相应版本的java客户端和kibana)
您好,我在创建新索引时使用了动态映射,并且在我的映射中使用了以下部分来获取未知属性。
{
"string_fields": {
"match": "*",
"match_mapping_type": "string",
"mapping": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
}
我每秒为大约 30k 个文档建立索引,并且唯一未知属性的数量可能很大(所有索引中大约有 5k 个)。
问题:
是否有任何性能影响 (latency/computation/memory/disk) 当将属性索引为文本时我应该担心,实际上它们本质上应该只是关键字?
我是否应该在我的应用程序逻辑中努力确定每个新的未知 属性 是否最适合映射为文本或关键字?
您绝对应该尝试识别这些字段,而不是将它们映射为 text
。文本字段在通过分析管道时会带来负担。他们的价值被标记化、过滤和索引。
如果您需要对它们执行 full-text 搜索,那么一定要将它们作为文本索引,否则尽量不要这样做。您将在索引时节省 CPU 个周期和磁盘 space,在查询时节省堆,在重新启动集群时节省时间(因为您的索引会更小)。
我在这里只触及了表面,但底线是 text
带来了负担,关键字更不用说了。
我的堆栈: Elasticsearch 5.4(有相应版本的java客户端和kibana)
您好,我在创建新索引时使用了动态映射,并且在我的映射中使用了以下部分来获取未知属性。
{
"string_fields": {
"match": "*",
"match_mapping_type": "string",
"mapping": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
}
我每秒为大约 30k 个文档建立索引,并且唯一未知属性的数量可能很大(所有索引中大约有 5k 个)。
问题:
是否有任何性能影响 (latency/computation/memory/disk) 当将属性索引为文本时我应该担心,实际上它们本质上应该只是关键字?
我是否应该在我的应用程序逻辑中努力确定每个新的未知 属性 是否最适合映射为文本或关键字?
您绝对应该尝试识别这些字段,而不是将它们映射为 text
。文本字段在通过分析管道时会带来负担。他们的价值被标记化、过滤和索引。
如果您需要对它们执行 full-text 搜索,那么一定要将它们作为文本索引,否则尽量不要这样做。您将在索引时节省 CPU 个周期和磁盘 space,在查询时节省堆,在重新启动集群时节省时间(因为您的索引会更小)。
我在这里只触及了表面,但底线是 text
带来了负担,关键字更不用说了。