Мы ищем выпадающий список для поиска в ядре Solr.
У нас уже есть базовый поиск без предложений, поэтому основные настройки настроены. Я пытаюсь тщательно описать детали моего вопроса, не усложняя.
Если они ищут одно слово, мы хотим, чтобы было предложено наиболее распространенное слово с одинаковым соответствием.
Если они ищут более одного слова, мы хотим предложить наиболее распространенную комбинированную фразу. Если объединенная фраза отсутствует, мы хотим получить наиболее распространенный результат для одного из слов фразы.
Я пытался реализовать решение для предложения без необходимости создавать другое ядро, где я должен разобрать слова, фразы и счет.
Я изучил проверку орфографии и предложил компоненты.
Проблема, с которой я столкнулся, заключается в том, что она возвращает только все поле. Мы хотим, чтобы он возвращал столько слов, сколько они начали печатать.
Проблема, с которой я столкнулся при проверке орфографии, заключается в том, что она не возвращает правильные результаты, если слово написано правильно (имеет смысл, это проверка орфографии). И, если мы проверяем несколько слов по буквам, они разделяются в результатах. Если они ищут более одного слова и найдется совпадение, мы ожидаем, что оба слова будут возвращены, если они в одном и том же порядке, и мы ожидаем, что пользователь будет использовать правильное написание.
Сценарий документов в основном мы ищем:
{title: 5ft transparent tape},
{title: 5ft transparent dressing},
{title: onsite training},
{title: tape dispenser},
{title: countertop tape dispenser},
{title: 3ft tape measure},
{title: 5ft tape measure},
{title: 10ft tape measure},
{title: tape media}
Начинайте предлагать только после 3 символов. Только 1 результат.
search: "tra"
returns: transparent
^^ идея: возвращает наиболее часто встречающееся одиночное слово, «прозрачный» больше, чем «обучающий».
search: "tape me"
returns: "tape measure"
^^ идея: возвращает наиболее подходящие два слова, которые соответствуют, "рулетка" появляется больше, чем "ленточный носитель".
search: "cassette tape"
returns: "tape"
^^ идея: «кассета» не существует, как и «кассета», поэтому она возвращает наиболее распространенное слово «лента».
Nice to have, but not required:
search: "tape " (with space)
returns: "tape measure"
^^ идея: он знает, что пробел означает, что они собираются ввести другое слово, и возвращает два наиболее распространенных слова, которые начинаются с первого слова, «рулетка» появляется больше, чем «ленточный носитель» и «ленточный распределитель».
Есть идеи, как этого добиться, используя существующее ядро? Я подумал о том, как сделать это с новым ядром, разделив и нарезав кубики данных, и создав компонент предложения, но я бы хотел использовать имеющееся у нас ядро. Возможно ли это с помощью специального фильтра токенов? В настоящий момент у меня над головой есть собственный фильтр токенов, но я бы попробовал, если это возможно.
Спасибо за любую помощь!