在ElasticSearch或LogStash中更改默认分析器

时间:2013-11-04 20:44:55

标签: search elasticsearch logstash

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

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

来自IRC的解决方案:创建Index Template

2 个答案:

答案 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://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