Elasticsearch如何在索引中排除某些字段

时间:2018-07-05 02:56:04

标签: elasticsearch

我有一个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
 }

2 个答案:

答案 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