Я пытаюсь использовать свойства нескольких полей для поддержки нескольких языков. Я создал следующее отображение для этого:Обновление и поиск в свойствах нескольких полей в ElasticSearch
{
"mappings": {
"product": {
"properties": {
"prod-id": {
"type": "string"
},
"prod-name": {
"type": "string",
"fields": {
"en": {
"type": "string",
"analyzer": "english"
},
"fr": {
"type": "string",
"analyzer": "french"
}
}
}
}
}
}
}
Я создал тестовую запись:
{
"prod-id": "1234567",
"prod-name": [
"Test product",
"Produit d'essai"
]
}
и попытался запросить с помощью некоторых языков:
{
"query": {
"bool": {
"must": [
{"match": {
"prod-name.en": "Produit"
}}
]
}
}
}
В результате я получил мой документ. Но я ожидал, что у меня будет пустой результат, когда я буду использовать французский, но выберете английский. Кажется, ElasticSearch игнорирует, какое поле я указал в запросе. Нет никакой разницы в результатах поиска, когда я использую «prod-name.en» или «prod-name.fr» или просто «prod-name». Ожидается ли такое поведение? Должен ли я делать какие-то особые вещи, чтобы искать только на одном языке?
Другая проблема с обновлением свойства нескольких полей. Я не могу обновить только одно поле.
{
"doc" : {
"prod-name.en": "Test"
}
}
Я получил следующее сообщение об ошибке:
{
"error": {
"root_cause": [
{
"type": "mapper_parsing_exception",
"reason": "Field name [prod-name.en] cannot contain '.'"
}
],
"type": "mapper_parsing_exception",
"reason": "Field name [prod-name.en] cannot contain '.'"
},
"status": 400
}
Есть ли способ, чтобы обновить только одно поле в нескольких местах собственности?
Большое спасибо Val! Вы действительно помогли мне! Ваше решение отлично работает! –
Удивительный, рад, что это помогло! – Val