如何更新ElasticSearch索引映射并向其中添加多字段?

时间:2018-07-23 08:21:36

标签: elasticsearch

我使用以下设置和映射创建了索引:

PUT test

    {
        "settings": {
            "number_of_shards": 2,
            "number_of_replicas": 1
        },
        "mappings": {
            "documents": {
                "properties": {
                    "title": {
                        "type": "text",
                        "fields": {
                            "raw": {
                                "type": "keyword"
                            }
                        }
                    },
                    "url": {
                        "type": "text",
                        "fields": {
                            "raw": {
                                "type": "keyword"
                            }
                        }
                    },
                    "tags": {
                        "type": "keyword"
                    }
                }
            }
        }
    }

在上面的映射中,我已将标签声明为完全匹配的type关键字,并在其中添加了10个文档,例如:

PUT test/documents/1
{
  "title":"John",
  "url":"/john",
  "tags":["name question","how"]
}

但是我想为标签添加多字段支持,以支持部分标签匹配,因此我更新了索引映射,如下所示:

PUT test/documents/_mapping
{
    "properties": {
        "title": {
            "type": "text",
            "fields": {
                "raw": {
                    "type": "keyword"
                }
            }
        },
        "url": {
            "type": "text",
            "fields": {
                "raw": {
                    "type": "keyword"
                }
            }
        },
        "tags": {
            "type": "keyword",
            "fields": {
                "raw": {
                    "type": "text"
                }
            }
        }
    }
}

这是更新索引映射的正确方法吗?现在我的标签可以支持部分匹配了吗? 请帮助我

1 个答案:

答案 0 :(得分:3)

是的。这就是更新该字段的方法。尽管我不使用raw作为子字段的名称。将raw作为text类型并不常见。 例如,我将其命名为fulltext

无论如何,即使您更新了映射,也必须重新索引所有文档。

Update by Query将执行以下操作:

curl -X POST "localhost:9200/test/_update_by_query?conflicts=proceed"

顺便说一句(与您的问题无关),我将使用_doc作为类型名称,以便您将来为删除类型做更多的准备。