search - 更改 ElasticSearch 或 LogStash 中的默认分析器

标签 search elasticsearch logstash

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

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

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

最佳答案

根据这个page可以为每个查询、每个字段或每个索引指定分析器。

索引时间,Elasticsearch 将按以下顺序查找分析器:

  • 字段映射中定义的分析器。
  • 在索引设置中名为 default 的分析器。
  • 标准 分析器。

查询时,还有几层:

  • 全文查询中定义的分析器。
  • 字段映射中定义的search_analyzer
  • 字段映射中定义的分析器。
  • 在索引设置中名为 default_search 的分析器。
  • 在索引设置中名为 default 的分析器。
  • 标准 分析器。

另一方面,这个 page指向重要的事情:

An analyzer is registered under a logical name. It can then be referenced from mapping definitions or certain APIs. When none are defined, defaults are used. There is an option to define which analyzers will be used by default when none can be derived.

因此,将自定义分析器定义为默认分析器的唯一方法是覆盖 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"
          ]
        }
      }
    }
  }
}

关于search - 更改 ElasticSearch 或 LogStash 中的默认分析器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19776784/

相关文章:

search - Solr 架构和通过项目的关键字/标签提升

ios - 创建搜索文本字段

mysql - 使用mysql查询搜索段落中的某些单词

elasticsearch - Serilog未登录到Elasticsearch

python - python子进程完成后如何执行发布操作

Logstash 引发意外错误 : <ArgumentError: Setting "" hasn't been registered>,

elasticsearch - 使用function_score时如何向弹性查询添加过滤器?

elasticsearch - Elasticsearch中区分大小写的电子邮件ID处理程序,用于基于OpenID的用户身份验证

ruby-on-rails - rails : Elasticsearch :through association mapping

elasticsearch - 我可以通过 elasticsearch-template.json 设置 logstash 默认的 elasticsearch 映射吗