Я реализовал функцию поиска для своего сайта электронной коммерции, используя эластичный поиск. Базовая структура похожа: каждый продукт имеет название и независимо от того, что пользователь вводит, я ищу точную строку, используя эластичность, и возвращаю результат.Реализация поиска: Идентификация известных ключевых слов
Теперь я замечаю, что большинство поисковых фраз (почти 90%) следуют аналогичной схеме. Он содержит:
- Фирменное наименование продукта (Apple, Nokia и т.д.)
- Категория продукта (телефон, мобильный телефон, смартфон и т.д.) имя
- Модель продукта (iPhone 6S, Lumia 950 и т. Д.)
Теперь я думаю, что если я смогу идентифицировать конкретные компоненты, тогда я смогу вернуть лучшие результаты, чем просто совпадение текста.
У меня есть список брендов, категорий и моделей. Если я могу определить присутствующие термины, тогда я могу запросить elasticsearch с этим полем конкретно Например, строка поиска «Apple iPhone 5S», я должен уметь вывести этот бренд = Apple.
EDIT: Более подробную информацию, как просили в комментариях
Структура документа:
У меня есть один индекс и каждый документ ID является SKU продукта и содержит следующие поля
- название (Apple iPhone 5S)
- бренд (Apple)
- Катег (Электроника)
- sub_categ (смартфоны)
- модель (iPhone 5S)
- attribs (словарь атрибутов продукта частности к каждому sub_categ как { "цвет": "золото", "память": «32 GB " "батарея": "1570 мАч"})
- цены
Use Case:
Теперь, когда пользователь ищет фразу" айфон- s battery ", эластичный результат поиска результатов, который возвращает даже телефон. (Я согласен, что совпадение соответствия соответствует лучшим для батареи)
То, чего я пытаюсь достичь, у меня есть главный список подкатегорий. Поэтому, если в главном списке присутствует какое-либо слово из поисковой фразы, я бы выполнил поиск по elasticsearch с запросом ["must": {"sub_categ": "battery"}]. Таким образом, результат подкатегории «Смартфоны» не будет получен из резины. Я хочу воспроизвести это по нескольким полям, таким как бренд, категория и т. Д.
Вопрос в том, как быстро найти бренд или любое другое конкретное слово из главного списка, если оно присутствует в поисковой фразе? Единственный вариант, о котором я мог подумать, - перебирать главный список и проверять, присутствует ли слово в поисковой фразе. Если есть, то имейте это в виду и делайте то же самое во всем поле главного списка (бренд, categ, sub categ). Затем сгенерируйте запрос с обязательным и затем запросите их.Я хочу знать, есть ли лучший способ сделать это.
Вы можете поделиться своими картами? также какие результаты (документы) вы хотели бы вернуть для запроса «Apple iPhone 5S»? – ChintanShah25
В чем ваш вопрос? Вы можете обозначить свою строку и ссылаться на индекс бренда/категории/модели. Но как это может помочь вам в поисках поискового запроса? – Sobrique
@ ChintanShah25 отредактировал вопрос с подробностями – Sriram