我想在弹性搜索中为我的索引更新默认映射。但是所有的文档都指出我们必须提供更新映射的类型。问题是我有很多索引类型,它们是动态创建的,就像出现新类型的文档时一样。因此,处理的最佳方法是默认映射类型。因为我没有为每种类型定义映射。但现在我无法更新索引默认映射。如果有可能请告诉我?
答案 0 :(得分:0)
我使用default mapping如下:
我创建了索引,指定了_default_
映射。在这种情况下,我只有一个字段,但我想确保它不会被分析(所以我可以做各种类型的分面,比如说):
curl -XDELETE "http://localhost:9200/test_index"
curl -XPUT "http://localhost:9200/test_index" -d'
{
"mappings": {
"_default_": {
"properties": {
"title": {
"type": "string",
"index": "not_analyzed"
}
}
}
}
}'
然后我创建了几个不同类型的文档:
curl -XPUT "http://localhost:9200/test_index/doc_type1/1" -d'
{ "title": "some text" }'
curl -XPUT "http://localhost:9200/test_index/doc_type2/2" -d'
{ "title": "some other text" }'
因此,将动态生成每种类型的映射,并包含"title"
的默认映射。我们可以通过查看映射来看到这一点:
curl -XGET "http://localhost:9200/test_index/_mapping"
...
{
"test_index": {
"mappings": {
"_default_": {
"properties": {
"title": {
"type": "string",
"index": "not_analyzed"
}
}
},
"doc_type2": {
"properties": {
"title": {
"type": "string",
"index": "not_analyzed"
}
}
},
"doc_type1": {
"properties": {
"title": {
"type": "string",
"index": "not_analyzed"
}
}
}
}
}
}
如果我在title
字段上面对,我会回到我的期望:
curl -XPOST "http://localhost:9200/test_index/_search" -d'
{
"size": 0,
"facets": {
"title_values": {
"terms": {
"field": "title",
"size": 10
}
}
}
}'
...
{
"took": 1,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 2,
"max_score": 0,
"hits": []
},
"facets": {
"title_values": {
"_type": "terms",
"missing": 0,
"total": 2,
"other": 0,
"terms": [
{
"term": "some text",
"count": 1
},
{
"term": "some other text",
"count": 1
}
]
}
}
}
以下是我使用的代码:
http://sense.qbox.io/gist/05c503ce9ea841ca4013953b211e00dadf6f1549
这会回答你的问题吗?
编辑:以下是更新现有索引的_default_
映射的方法:
curl -XPUT "http://localhost:9200/test_index/_default_/_mapping" -d'
{
"_default_": {
"properties": {
"title": {
"type": "string",
"index": "not_analyzed"
},
"name": {
"type": "string",
"index": "not_analyzed"
}
}
}
}'
(顺便说一句,我使用Elasticsearch 1.3.4版本来解决这个问题。)