我有一个自定义对象,我希望将其存储在ElasticSearch中作为索引中自己的类型,但我不希望对象中的任何字段进行分析。我应该怎么做呢?
我一直在使用ElasticSearch NEST客户端,但如果需要也可以手动创建映射。
答案 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允许使用新字段,但默认所有string
为not_analyzed
:
"dynamic_templates" : [ {
"strings" : {
"mapping" : {
"index" : "not_analyzed",
"type" : "string"
},
"match" : "*",
"match_mapping_type" : "string"
}
} ]
这将允许您动态地向映射添加字段。