我从Logstash获得的数据正在以过分的方式进行分析。从本质上讲,字段"OS X 10.8"
将分为"OS"
,"X"
和"10.8"
。我知道我可以更改现有数据的映射和重新索引,但是如何更改默认分析器(在ElasticSearch或LogStash中)以避免将来的数据出现此问题?
具体解决方案:我在第一次将数据发送到新集群之前为该类型创建了映射。
来自IRC的解决方案:创建Index Template
答案 0 :(得分:8)
根据page分析器,可以按查询,按字段或按索引指定。
在index time
,Elasticsearch将按此顺序查找分析器:
field mapping
中定义的分析器。 default
的分析器。 standard
分析器。在query time
,还有一些图层:
full-text query
。search_analyzer
。field mapping
。default_search
的分析器。default
的分析器。standard
分析器。另一方面,这page指向重要的事情:
分析器以逻辑名称注册。然后可以从映射定义或某些API引用它。如果未定义,则使用默认值。有一个选项可以定义在没有任何分析器可以派生时默认使用哪些分析器。
因此,将自定义分析器定义为默认值的唯一方法是覆盖pre-defined analyzers之一,在本例中为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"
]
}
}
}
}
}
答案 1 :(得分:7)
如您所知,当没有明确指定分析器时,elasticsearch使用标准分析器。因此,在设置模板时,您可以设置名为标准的自定义分析器。在那里,您可以设置自己的设置分析器,令牌,标记过滤器的规则。
以下是一些有助于您更好地理解的有用链接:
http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/analysis.html