2013-11-04 27 views
6

我已经从Logstash获取数据,这些数据是以过分的方式进行分析的。本质上,该字段"OS X 10.8"将被分成"OS","X""10.8"。我知道我可以更改现有数据的映射和重新索引,但是如何更改默认分析器(在ElasticSearch或LogStash中)以避免将来数据中出现此问题?更改ElasticSearch或LogStash中的默认分析器

具体解决方案:在我第一次向新集群发送数据之前,我为该类型创建了一个映射。从IRC

解决方案:创建一个Index Template

回答

7

如你所知,elasticsearch使用时没有明确指定仪标准分析仪。因此,在设置模板时,您可以设置名为标准的自定义分析器。在那里你可以设置你自己的设置分析器,标记符,令牌过滤器的规则。

下面是一些有用的链接,这将有助于你更好地理解:

http://elasticsearch-users.115913.n3.nabble.com/How-we-can-change-Elasticsearch-default-analyzer-td4040411.html

http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/analysis.html

6

根据该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" 
      ] 
     } 
     } 
    } 
    } 
} 
+0

作品上'2.4.6',谢谢。另一个答案没有奏效。 – cahen

+0

@cahen我很高兴它可以帮助你。 –