Solr предлагает наиболее распространенный результат, не возвращая всю фразу - PullRequest
0 голосов
/ 10 января 2019

Мы ищем выпадающий список для поиска в ядре 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"

^^ идея: он знает, что пробел означает, что они собираются ввести другое слово, и возвращает два наиболее распространенных слова, которые начинаются с первого слова, «рулетка» появляется больше, чем «ленточный носитель» и «ленточный распределитель».

Есть идеи, как этого добиться, используя существующее ядро? Я подумал о том, как сделать это с новым ядром, разделив и нарезав кубики данных, и создав компонент предложения, но я бы хотел использовать имеющееся у нас ядро. Возможно ли это с помощью специального фильтра токенов? В настоящий момент у меня над головой есть собственный фильтр токенов, но я бы попробовал, если это возможно.

Спасибо за любую помощь!

Ответы [ 2 ]

0 голосов
/ 16 января 2019

Я должен был найти правильный фильтр. ShingleFilterFactory - этот фильтр создает дранку, которые являются n-граммами токена, из потока токенов. Он объединяет серии токенов в один токен.

https://lucene.apache.org/solr/guide/7_0/filter-descriptions.html#shingle-filter

<fieldType name="spellcheck_phrase" class="solr.TextField" positionIncrementGap="100">
  <analyzer>
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.ShingleFilterFactory" maxShingleSize="4" outputUnigrams="false"/>
  </analyzer>
</fieldType>

Пример вышеприведенного анализатора:

В кн .: «Быть ​​или не быть».

Tokenizer to Filter: «To» (1), «be» (2), «or» (3), «not» (4), «to» (5), «be» (6)

Out: «Быть» (1), «Быть ​​или» (1), «Быть ​​или не быть» (1), «Быть ​​или» (2), «Быть ​​или не» (2), « быть или нет "(2)," или нет "(3)," или нет "(3)," или не быть "(3)," не "(4)," не быть "( 4) «быть» (5)

0 голосов
/ 12 января 2019

Посмотрите на подсказку AnalyzingInfix https://lucidworks.com/2015/03/04/solr-suggester/

...