将每个属性类型设置为not_analyzed为自定义对象

时间:2014-12-20 01:08:00

标签: elasticsearch

我有一个自定义对象,我希望将其存储在ElasticSearch中作为索引中自己的类型,但我不希望对象中的任何字段进行分析。我应该怎么做呢?

我一直在使用ElasticSearch NEST客户端,但如果需要也可以手动创建映射。

1 个答案:

答案 0 :(得分:6)

你有几个选项可以全部运作。就个人而言,我会选择前两个中的任何一个。如果它是每日索引,则第二个是更好的选择。

  • 预先定义映射并禁用动态字段。这是迄今为止最安全的方法,它可以帮助您避免错误,并且可以防止在之后添加字段。

    {
      "mappings": {
        "_default_": {
          "_all": {
            "enabled": false
          }
        },
        "mytype" : {
          "dynamic" : "strict",
          "properties" : {
            ...
          }
        }
      }
    }
    
  • Create an index template 禁用动态字段,但允许您使用相同的映射连续滚动新索引。

    您可以创建分层索引模板,以便多个应用于任何给定索引。

    {
      "template": "mytimedindex-*", 
      "settings": {
        "number_of_shards": 2
      },
      "mappings": {
        "_default_": {
          "_all": {
            "enabled": false
          }
        },
        "mytype" : {
          "dynamic" : "strict",
          "properties" : {
            ...
          }
        }
      }
    }
    
  • Create a dynamic mapping允许使用新字段,但默认所有stringnot_analyzed

    "dynamic_templates" : [ {
      "strings" : {
        "mapping" : {
          "index" : "not_analyzed",
          "type" : "string"
        },
        "match" : "*",
        "match_mapping_type" : "string"
      }
    } ]
    

    这将允许您动态地向映射添加字段。