Я относительно новичок в поиске elastics, и я хотел бы сопоставить одно из моих полей с структурой associative array
.Сопоставление ассоциативного массива в Elasticsearch
Что я в настоящее время:
один продукт типа product
в индексе products
:
{
"name":"Nexus 10",
"category":"Tablets",
"interests": {
"1":30,
"3":70
}
}
Как вы можете видеть, поле interests
является ассоциативным массивом. Ключ - User ID
, а значение - the number of times the user talked about this product
.
Динамическое отображение дало мне:
{
"products":{
"mappings":{
"product":{
"properties":{
"category":{
"type":"string"
},
"interests":{
"properties":{
"1":{
"type":"long"
},
"3":{
"type":"long"
},
}
},
"name":{
"type":"string"
}
}
}
}
}
}
Что я хочу:
Поскольку я собираюсь иметь много записей в interests
поле, я не хочу, динамическое отображение для сопоставления каждого идентификатора.
Идея заключается в том, чтобы иметь возможность искать конкретное значение user ID
в поле interests
, чтобы я мог увеличить оценку результата в зависимости от количества раз, когда этот конкретный пользователь говорил об этом продукте.
Я хотел бы иметь возможность сопоставить этот вид структуры.
У вас есть идеи, как достичь этого?
Thanks,
Большое спасибо за ваш ответ. Ваша статья очень интересная, я буду держать это: D. Просто быстрый вопрос, однако, это означает, что вместо того, чтобы иметь такой скрипт: '_score * (интересы содержат userId? NumberOfMentions: 1)' Мне нужно 'foreach интересы: искать userId передано как param'? – Brice
Если вы используете «вложенный» запрос, вы можете использовать, например. 'total' как' score_mode', чтобы суммировать десятки всех соответствующих документов. Вот пример: https://www.found.no/play/gist/4a68e0e1e724e0f9e693 –
Большое вам спасибо! – Brice