我有一个JSON数据,在索引数据时该数据会通过弹性搜索自动映射。如何排除映射中的某些字段。我已经尝试过手动定义地图,但是当我进行批量索引时,它会自动映射其他字段。
例如我的JSON数据看起来像这样
[
{
"id": "232",
"name": "Lorem",
"description": "Ipsum Dolor",
"image": [
{"key": "asadasd.jpg"},
{"key": "asasd2d.jpg"}
],
"is_active": true
},
...
我手动定义地图时
PUT myindex
{
"mappings": {
"product": {
"properties": {
"id": { "type": "text },
"name": { "type": "text"},
"description": { "type": "text" },
"is_active": { "type": "boolean" }
}
}
}
}
我想要实现的是数据仍然保留,我只想排除不包含在索引中的image属性。
这样,当我仍然在弹性搜索中查询时,我会得到带有图像的数据
有可能吗?
谢谢你们。我是Elasticsearch的新手
{
"id": "232",
"name": "Lorem",
"description": "Ipsum Dolor",
"image": [
{"key": "asadasd.jpg"},
{"key": "asasd2d.jpg"}
],
"is_active": true
}
答案 0 :(得分:3)
是的,只需在映射中添加dynamic: false
即可,如下所示:
PUT myindex
{
"mappings": {
"product": {
"dynamic": false, <-- add this line
"properties": {
"id": {
"type": "text"
},
"name": {
"type": "text"
},
"description": {
"type": "text"
},
"is_active": {
"type": "boolean"
}
}
}
}
}
image
数组仍将位于源中,但不会修改映射。
答案 1 :(得分:0)
被接受的答案的问题是,您需要显式地为所有字段添加映射,这并非总是需要的(例如,对于数组类型)。 您可以像这样禁用该字段:
PUT myindex
{
"mappings": {
"product": {
"properties": {
"id": { "type": "text },
"name": { "type": "text"},
"description": { "type": "text" },
"is_active": { "type": "boolean" },
"image": { "type": "object, "enabled": false }
}
}
}
}
image
数组仍将保留在_source中。
参考:https://www.elastic.co/guide/en/elasticsearch/reference/current/enabled.html