2013-11-04 44 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我很高興它可以幫助你。 –