Я недавно обновился с Elasticsearch 1.4 до 5.4, и мне сложно эффективно переносить запросы автозаполнения. Проблема в том, что я хочу иметь подсказчик завершения, где вывод отличается от ввода.
В документах, которые я храню, есть поле для категорий, которое в основном представляет собой массив строк с их URI (потому что они образуют дерево). Последняя часть URI, которую я называю меткой, является вводом в подсказчик завершения, но в качестве ответа я хотел бы получить полный URI.
Допустим, у меня есть два документа:
{
"name" : "Lord of The Rings",
"categories" : ["Books/Genre/Fantasy", "Books/Language/English"]
}
и
{
"name" : "Game of Thrones",
"categories" : ["Series/Genre/Fantasy", "Series/Host/HBO"]
}
Я ввел «Фант», и я хочу получить в ответ URI для категорий «Сериал / Жанр / Фэнтези» и «Книги / Жанр / Фэнтези».
Ранее с ES 1.4 я мог создать подсказчик завершения с другим выводом для данного ввода, поэтому я проиндексировал своих подсказчиков следующим образом:
{
"suggest" : {
"input": [ "Fantasy"],
"output": "Series/Genre/Fantasy"
}
}
и
{
"suggest" : {
"input": [ "Fantasy"],
"output": "Books/Genre/Fantasy"
}
}
Но в ES 5.4 свойство output больше не существует для подсказчиков завершения, поэтому все, что я получаю в ответ, - это свойство input
моего поля подсказки, которое является меткой «Fantasy», но мне нужен URI.
Прямо сейчас мой обходной путь - искать поле categories
каждого документа, возвращенного в свойстве _source
ответа, и фильтровать категории, у которых есть метка, начинающаяся с ввода «Fant». Это очень неэффективно, так как мне нужно сопоставить каждую категорию каждого возвращенного документа с его меткой, чтобы проверить ввод.
Нет более эффективного способа сделать это с помощью суггестеров ES? Что мне не хватает?