我已经从Logstash获取数据,这些数据是以过分的方式进行分析的。本质上,该字段"OS X 10.8"
将被分成"OS"
,"X"
和"10.8"
。我知道我可以更改现有数据的映射和重新索引,但是如何更改默认分析器(在ElasticSearch或LogStash中)以避免将来数据中出现此问题?更改ElasticSearch或LogStash中的默认分析器
具体解决方案:在我第一次向新集群发送数据之前,我为该类型创建了一个映射。从IRC
解决方案:创建一个Index Template
我已经从Logstash获取数据,这些数据是以过分的方式进行分析的。本质上,该字段"OS X 10.8"
将被分成"OS"
,"X"
和"10.8"
。我知道我可以更改现有数据的映射和重新索引,但是如何更改默认分析器(在ElasticSearch或LogStash中)以避免将来数据中出现此问题?更改ElasticSearch或LogStash中的默认分析器
具体解决方案:在我第一次向新集群发送数据之前,我为该类型创建了一个映射。从IRC
解决方案:创建一个Index Template
如你所知,elasticsearch使用时没有明确指定仪标准分析仪。因此,在设置模板时,您可以设置名为标准的自定义分析器。在那里你可以设置你自己的设置分析器,标记符,令牌过滤器的规则。
下面是一些有用的链接,这将有助于你更好地理解:
http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/analysis.html
根据该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"
]
}
}
}
}
}
作品上'2.4.6',谢谢。另一个答案没有奏效。 – cahen
@cahen我很高兴它可以帮助你。 –