Я делаю проект по индексации вопросов и ответов веб-сайта в elasticsearch (версия 6) для целей поиска.
Сначала я подумал о создании двух индексов, как показано ниже, один для вопросов и один для ответов.
сопоставление вопросов:
{"mappings": {
"question": {
"properties": {
"title":{
"type":"text"
},
"question": {
"type": "text"
},
"questionId":{
"type":"keyword"
}
}
}
}
}
сопоставление ответов:
{"mappings": {
"answer": {
"properties": {
"answer":{
"type":"text"
},
"answerId": {
"type": "keyword"
},
"questionId":{
"type":"keyword"
}
}
}
}
}
Я использовал запрос с множественным соответствием вместе с агрегацией терминов и top_hits для поиска индексированных вопросов и ответов (упомянутый вопрос). Я использовал этот метод, чтобы удалить дубликаты из результатов поиска. Как ответы или сам вопрос одного и того же вопроса может появиться в результате. Мне нужна только одна запись на вопрос в результатах. проблема, с которой я сталкиваюсь, состоит в том, чтобы разбить результаты на страницы. нет возможности разбить агрегацию на страницы в elasticsearch. Он может разбивать на страницы только хиты, а не агрегации.
затем я подумал о том, чтобы сохранить и вопрос, и ответы в одном документе, ответы в массиве Json. проблема с этим подходом заключается в том, что нет простого способа добавить, удалить, обновить конкретный ответ в заданном документе вопроса. единственный способ, который я нашел, - это использовать отличный скрипт (ссылочный вопрос). который устарел в elasticsearch v6 AFAIK.
Есть ли лучший и чистый способ спроектировать это? Спасибо.