你好Elasticsearch Gurus。
给出以下索引和doctype: 本地主机:9200 / myindex / mydoctype
我目前有这个索引定义:
{
"myindex": {
"aliases": {},
"mappings": {
"mydoctype": {
"properties": {
"theNumber": {
"type": "integer"
},
"theString": {
"type": "string"
}
}
}
},
"settings": {
"index": {
"creation_date": "1487158714808",
"number_of_shards": "5",
"number_of_replicas": "1",
"version": {
"created": "1070599"
},
"uuid": "cm2OtivhTO-RjuZPeHvL1w"
}
},
"warmers": {}
}
}
我能够添加这个文件:
{
"theNumber" : 0,
"theString" : "zero"
}
但我没想到的是,我也可以添加这个文件:
{
"theNumber" : 3.1418,
"theString" : 3,
"fiefoe" : "fiefoe"
}
...字段类型不匹配的地方。 除了引入了新的字段/列之外。 由于我为索引定义的映射,我没想到会出现这种行为。
这是否与Elasticsearch无架构有关? 是否可以将Elasticsearch设置为仅接受为此索引添加的每个文档的那些类型和字段? 这是弹性搜索映射的首要工作方式吗? (也许我不知道呵呵呵)
谢谢=)
答案 0 :(得分:3)
Elasticsearch使用动态映射,因此当它找到映射中不存在的字段时,它会尝试通过猜测其类型来对其进行索引。
您可以使用dynamic: false
在根对象上的映射中禁用此行为。在这种情况下,ElasticSearch将忽略未映射的字段。
{
"myindex": {
"aliases": {},
"mappings": {
"mydoctype": {
"dynamic": false, <-----
"properties": {
"theNumber": {
"type": "integer"
},
"theString": {
"type": "string"
}
}
}
},
"settings": {
"index": {
"creation_date": "1487158714808",
"number_of_shards": "5",
"number_of_replicas": "1",
"version": {
"created": "1070599"
},
"uuid": "cm2OtivhTO-RjuZPeHvL1w"
}
},
"warmers": {}
}
}
或者,如果要在未映射的字段尝试编制索引时抛出异常,则可以使用dynamic:strict
。
此文档为here。
答案 1 :(得分:0)