ElasticSearch 中没有映射的带有斜线的值的术语过滤器
Term Filter for Value with Slash without Mapping in ElasticSearch
我有一个要求,我不能向 ElasticSearch 索引添加任何映射,因为所有索引都是动态的,并且是在 运行 时间创建的,并且都有不同的字段(只有 5 个公共字段)。因此,我在为 URL(例如 http://www.domain.com/a/b)或 mimetype(例如 image/jpeg)使用术语过滤器时遇到问题。在不添加映射的情况下绕过斜杠或其他特殊字符的最佳方法是什么?
您可以将模板添加到您的 elasticsearch 索引
在那里您可以指定您的索引,映射将在 运行 时间为您的所有数据自动创建。
根据@tcarmet 的回答,这就是我最终使用的模板。
{
"enable_raw_string": {
"order": 0,
"template": "*",
"settings": {},
"mappings": {
"_default_": {
"dynamic_templates": [
{
"strings": {
"mapping": {
"type": "string",
"fields": {
"raw": {
"ignore_above": 256,
"index": "not_analyzed",
"type": "string"
}
}
},
"match_mapping_type": "string"
}
}
]
}
},
"aliases": {}
}
}
然后我可以只针对 x.raw 而不是 x 进行过滤。
我有一个要求,我不能向 ElasticSearch 索引添加任何映射,因为所有索引都是动态的,并且是在 运行 时间创建的,并且都有不同的字段(只有 5 个公共字段)。因此,我在为 URL(例如 http://www.domain.com/a/b)或 mimetype(例如 image/jpeg)使用术语过滤器时遇到问题。在不添加映射的情况下绕过斜杠或其他特殊字符的最佳方法是什么?
您可以将模板添加到您的 elasticsearch 索引
在那里您可以指定您的索引,映射将在 运行 时间为您的所有数据自动创建。
根据@tcarmet 的回答,这就是我最终使用的模板。
{
"enable_raw_string": {
"order": 0,
"template": "*",
"settings": {},
"mappings": {
"_default_": {
"dynamic_templates": [
{
"strings": {
"mapping": {
"type": "string",
"fields": {
"raw": {
"ignore_above": 256,
"index": "not_analyzed",
"type": "string"
}
}
},
"match_mapping_type": "string"
}
}
]
}
},
"aliases": {}
}
}
然后我可以只针对 x.raw 而不是 x 进行过滤。