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/

相关文章:

regex - Grok/Oniguruma 模式匹配来自 X-Forwarded-For header 的第一个 IP

java - Hibernate Search 3.1.1 - 如何以任意顺序搜索字段中同一短语中的多个单词

arrays - in 的排序版本

.net - 如何使用NEST在Elasticsearch中创建多字段映射

elasticsearch - Elasticsearch匹配类型数组字段中的确切单词

elasticsearch - 如何覆盖来自 logstash 中的 json 的时间戳字段

elasticsearch - grok模式从日志消息中提取数据

search - 为什么indexed_search仅在TYPO3 8/9中的子页面上不起作用?

python - 如何在 django 中注册查找?

elasticsearch - 使用elasticsearch中的脚本来查找两个整数字段之间的差异并检查其是否在特定范围内