7

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

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

IRC 的解决方案:创建索引模板

4

2 回答 2

10

根据此页面分析器可以按查询、按字段或按索引指定。

index time,Elasticsearch 将按以下顺序查找分析器:

  • 中定义的分析器field mapping
  • default在索引设置中命名的分析器。
  • 分析standard仪。

query time处,还有几层:

  • 中定义的分析器full-text query
  • search_analyzer字段映射中定义。
  • 中定义的分析器field mapping
  • default_search在索引设置中命名的分析器。
  • default在索引设置中命名的分析器。
  • 分析standard仪。

另一方面,此页面指向重要的事情:

分析器以逻辑名称注册。然后可以从映射定义或某些 API 中引用它。如果没有定义,则使用默认值。有一个选项可以定义在无法派生时默认使用哪些分析器。

因此,将自定义分析器定义为默认值的唯一方法是覆盖预定义分析器之一,在本例中为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"
          ]
        }
      }
    }
  }
}
于 2016-10-25T08:08:27.767 回答
7

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

以下是一些有用的链接,可以帮助您更好地理解:

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

于 2013-11-05T15:13:48.170 回答