Один из подходов для этого - добавить несколько input
в поле completion
.У меня когда-то был похожий случай использования с почтовыми адресами.Например, такой адрес, как «1000 Market St, San Francisco, CA 94103» должен появиться, когда пользователь начнет вводить один из следующих токенов:
- 1000
- Market
- Market St
- (также в конечном итоге) Сан-Франциско (в зависимости от размера)
- (также в конечном итоге) 94103 (в зависимости от размера)
Так вЧтобы поддержать случай использования, идея заключалась в том, чтобы индексировать документ следующим образом:
PUT addresses/_doc/1
{
"display": "1000 Market St, San Francisco, CA 94103",
"suggest" : {
"input": [
"1000 Market St, San Francisco, CA 94103",
"Market St, San Francisco, CA 94103",
"San Francisco, CA 94103",
"94103"
]
}
}
Хорошо с адресами то, что они имеют структуру (номер улицы, направление улицы, название улицы и т. д.).В вашем случае с названиями книг это немного сложнее, поскольку не существует неявной структуры.Тем не менее, вы можете просто разделить ввод по каждому пробелу и индексировать часть, которая идет после пробела (без стоп-слов).Например, для «Автобиографии Стива Джобса» вы должны проиндексировать следующие данные:
- Автобиография Стива Джобса
- Стив Джобс
- Джобс
Конкретно,
PUT books/_doc/1
{
"display": "Autobiography of Steve Jobs",
"suggest" : {
"input": [
"Autobiography of Steve Jobs",
"Steve Jobs",
"Jobs"
]
}
}
Таким образом, когда пользователь вводит «Стив» или даже просто «Джобс», книга появляется.Вы также можете играть с весами, чтобы придать большее значение точному названию, чем другим вариантам.
Попробуйте и посмотрите, как оно получится.