Elasticsearch - 在所有字段上设置默认分析器

时间:2016-05-12 06:58:48

标签: elasticsearch

我有一个索引,其中映射会发生巨大变化。例如,考虑我正在索引其他所有文章的维基百科print_r()数据。信息框中的数据不是结构化的,也不是统一的。因此,数据可以是以下形式: -

infobox

由于所有字段都不同,我想在相关字段上应用“完成”字段,因此我正在考虑在所有字段上应用分析器。

如何在索引时默认在每个字段上应用分析器?

1 个答案:

答案 0 :(得分:0)

您的索引需要_default_模板,因此无论何时添加新字段,这些string字段都会从_default_模板中获取映射:

{
  "template": "infobox*",
  "mappings": {
    "_default_": {
      "dynamic_templates": [
        {
          "string_fields": {
            "match": "*",
            "match_mapping_type": "string",
            "mapping": {
              "type": "string",
              "index": "analyzed",
              "analyzer": "my_completion_analyzer",
              "fielddata": {
                "format": "disabled"
              },
              "fields": {
                "raw": {
                  "type": "string",
                  "index": "not_analyzed",
                  "ignore_above": 256
                }
              }
            }
          }
        }
      ]
    }
  }
}

或者如果您的索引不是每日/每周索引,您只需创建一次并定义_default_映射:

PUT /infobox
{
  "mappings": {
    "_default_": {
      "dynamic_templates": [
        {
          "string_fields": {
            "match": "*",
            "match_mapping_type": "string",
            "mapping": {
              "type": "string",
              "index": "analyzed",
              "analyzer": "my_completion_analyzer",
              "fielddata": {
                "format": "disabled"
              },
              "fields": {
                "raw": {
                  "type": "string",
                  "index": "not_analyzed",
                  "ignore_above": 256
                }
              }
            }
          }
        }
      ]
    }
  }
}