我有来自 Logstash 的数据,这些数据正在以一种过分急切的方式进行分析。本质上,该字段"OS X 10.8"
将分为"OS"
、 "X"
和"10.8"
。我知道我可以更改现有数据的映射和重新索引,但我将如何更改默认分析器(在 ElasticSearch 或 LogStash 中)以避免在未来数据中出现此问题?
具体解决方案:在第一次将数据发送到新集群之前,我为该类型创建了一个映射。
IRC 的解决方案:创建索引模板
我有来自 Logstash 的数据,这些数据正在以一种过分急切的方式进行分析。本质上,该字段"OS X 10.8"
将分为"OS"
、 "X"
和"10.8"
。我知道我可以更改现有数据的映射和重新索引,但我将如何更改默认分析器(在 ElasticSearch 或 LogStash 中)以避免在未来数据中出现此问题?
具体解决方案:在第一次将数据发送到新集群之前,我为该类型创建了一个映射。
IRC 的解决方案:创建索引模板
根据此页面分析器可以按查询、按字段或按索引指定。
在index time
,Elasticsearch 将按以下顺序查找分析器:
field mapping
。default
在索引设置中命名的分析器。standard
仪。在query time
处,还有几层:
full-text query
。search_analyzer
字段映射中定义。field mapping
。default_search
在索引设置中命名的分析器。default
在索引设置中命名的分析器。standard
仪。另一方面,此页面指向重要的事情:
分析器以逻辑名称注册。然后可以从映射定义或某些 API 中引用它。如果没有定义,则使用默认值。有一个选项可以定义在无法派生时默认使用哪些分析器。
因此,将自定义分析器定义为默认值的唯一方法是覆盖预定义分析器之一,在本例中为default
分析器。这意味着我们不能为我们的分析器使用任意名称,它必须命名default
这是一个简单的索引设置示例:
{
"settings": {
"number_of_shards": 1,
"number_of_replicas": 0,
"analysis": {
"char_filter": {
"charMappings": {
"type": "mapping",
"mappings": [
"\\u200C => "
]
}
},
"filter": {
"persian_stop": {
"type": "stop",
"stopwords_path": "stopwords.txt"
}
},
"analyzer": {
"default": {<--------- analyzer name must be default
"tokenizer": "standard",
"char_filter": [
"charMappings"
],
"filter": [
"lowercase",
"arabic_normalization",
"persian_normalization",
"persian_stop"
]
}
}
}
}
}
如您所知,当没有明确指定分析器时,elasticsearch 使用标准分析器。因此,在设置模板时,您可以设置名为standard的自定义分析器。在那里你可以设置你自己的设置分析器、tokenzier、token过滤器的规则。
以下是一些有用的链接,可以帮助您更好地理解:
http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/analysis.html