是否可以使用多字段来设置和查询多语言字段?
考虑这种映射:
PUT multi_test
{
"mappings": {
"data": {
"_field_names": {
"enabled": false
},
"properties": {
"book_title": {
"type": "text",
"fields": {
"english": {
"type": "text",
"analyzer": "english"
},
"german": {
"type": "text",
"analyzer": "german"
},
"italian": {
"type": "text",
"analyzer": "italian"
}
}
}
}
}
}
}
我尝试了以下操作,但它不起作用:
PUT multi_test/data/1
{
"book_title.english": "It's good",
"book_title.german": "Das gut"
}
错误似乎表明我正在尝试添加新字段:
{“error”:{“root_cause”:[{“type”:“mapper_parsing_exception”, “reason”:“无法为字段动态添加映射 [book_title.english]。 [book_title]的现有映射必须是 键入对象但找到[text]。“}],”type“: “mapper_parsing_exception”,“reason”:“无法动态添加 字段[book_title.english]的映射。现有的映射 [book_title]必须是object类型,但找到[text]。“},”status“: 400}
我在这里做错了什么?
如果我的方法不可行,那么更好的方法是什么?
答案 0 :(得分:1)
问题是您正在使用字段book_title 的字段。
在您的用例中,映射应如下所示
PUT multi_test
{
"mappings": {
"data": {
"_field_names": {
"enabled": false
},
"properties": {
"book_title": {
"properties": {
"english": {
"type": "text",
"analyzer": "english"
},
"german": {
"type": "text",
"analyzer": "german"
},
"italian": {
"type": "text",
"analyzer": "italian"
}
}
}
}
}
}
}
这会将book_title定义为对象类型,您可以在book_title下添加多个具有不同数据的字段