弹性搜索仅索引可搜索字段

时间:2019-04-24 19:30:32

标签: elasticsearch

我想创建一个仅对某些字段建立索引的索引。我创建了一个模板,其enabled属性设置为false。因此,默认情况下没有字段被索引。 https://www.elastic.co/guide/en/elasticsearch/reference/6.4/enabled.html

然后,我定义了要使用动态模板索引的字段。插入文档后,没有索引字段。我猜这是因为enabled:false应用于根元素的子元素,并且由于都不应该对其进行索引,因此不会应用动态模板。

是否有一种方法可以将动态模板未涵盖的所有字段的enable设置为false?

DELETE so

DELETE _template/test

PUT _template/test
{
  "index_patterns": [
    "*so*"
  ],
  "settings": {
    "number_of_shards": 1
  },
  "mappings": {
    "_doc": {
      "dynamic": true,
      "enabled": false,
      "dynamic_templates": [
        {
          "typeOfMaterial": {
            "path_match": "*.material.typeOfMaterial",
            "mapping": {
              "enabled": true,
              "type": "nested"
            }
          }
        },
        {
          "typeOfMaterialCode": {
            "path_match": "*.material.typeOfMaterial.code",
            "mapping": {
              "enabled": true,
              "type": "keyword"
            }
          }
        }
      ]
    }
  }
}

PUT so/_doc/1
{
  "count": 5,
  "AAA": {
    "material": {
      "typeOfMaterial": [
        {
          "code": "MAT1"
        }
      ]
    }
  }
}

1 个答案:

答案 0 :(得分:0)

根据documentation

  

模板按顺序处理-第一个匹配的模板获胜。

基于此假设,我将尝试修改模板,如下所示:

PUT _template/test
{
  "index_patterns": [
    "*so*"
  ],
  "settings": {
    "number_of_shards": 1
  },
  "mappings": {
    "_doc": {
      "dynamic": true,
      "dynamic_templates": [
        {
          "typeOfMaterial": {
            "path_match": "*.material.typeOfMaterial",
            "mapping": {
              "enabled": true,
              "type": "nested"
            }
          }
        },
        {
          "typeOfMaterialCode": {
            "path_match": "*.material.typeOfMaterial.code",
            "mapping": {
              "enabled": true,
              "type": "keyword"
            }
          }
        },
        {
          "allOtherFields": {
            "match": "*",
            "mapping": {
              "enabled": false
            }
          }
        }
      ]
    }
  }
}