Результаты запроса Solr с помощью * - PullRequest
3 голосов
/ 07 апреля 2010

Я хочу обеспечить частичное соответствие, поэтому я добавляю * в конец поисковых запросов.Что я заметил, так это то, что поисковый запрос gatorade вернет 12 результатов, тогда как gatorade * возвращает 7. Так что * кажется 1 или много, а не 0 или много ... как я могу достичь этого?Я собираюсь о частичном сопоставлении в Solr все неправильно?Спасибо.

Ответы [ 6 ]

7 голосов
/ 08 апреля 2010

Во-первых, я думаю, что подстановочные знаки Solr лучше суммировать как "0 или много", чем "1 или много".Я сомневаюсь, что это источник вашей проблемы.(Например, см. javadocs для WildcardQuery .)

Во-вторых, используете ли вы stemming, потому что я думаю, что вы имеете дело с проблемой stemming.Символы подстановки Solr могут вести себя как-то странно со стеммингом.Это связано с тем, что расширение по шаблону основано на поиске в списке терминов, хранящихся в инвертированном индексе;эти термины будут в стебельной форме (возможно, что-то вроде «gatorad»), а не слова из исходного исходного текста (возможно, «gatorade» или «gatorades»).

Например, предположим, что у вас естьстеммер, который отображает «gatorade» и «gatorades» в стебле «gatorad».Это означает, что ваш инвертированный индекс не будет содержать ни «gatorade», ни «gatorades», а только «gatorad».Если вы затем выполните запрос gatorade *, Solr будет выполнять поиск по индексу терминов, ища все основы, начинающиеся с "gatorade".Но таких стволов нет, поэтому совпадений не будет.Точно так же, если вы искали gatorades *, Solr будет искать все стебли, начинающиеся с "gatorades".Но таких основ нет, поэтому совпадений не будет.

В-третьих, для оптимальной помощи, я бы предложил опубликовать дополнительную информацию, в частности:

  • НекоторыеURL конкретных запросов, которые вы отправляете в Solr
  • Выдержка из вашего файла schema.xml.В частности, включите A) элементы полей для полей, с которыми у вас возникли проблемы, и B) определения типов полей, соответствующих этим полям
2 голосов
/ 17 апреля 2010

Если вы хотите, чтобы запрос возвратил все документы, которые соответствуют либо стебельной форме gatorade, либо словам, начинающимся с gatorade, вам нужно будет создать запрос самостоятельно: + (gatorade gatorade *). В качестве альтернативы вы можете расширить SolrParser для этого, но это больше работы.

2 голосов
/ 08 апреля 2010

так что я искал для поиска «gatorade» -> «gatorade ИЛИ gatorade *», который даст мне все совпадения, которые я ищу.

1 голос
/ 10 августа 2012

Я предполагаю, что отсутствующие совпадения - "Gatorade" (с большой буквы "G"), и у вас есть строчный фильтр на вашем поле. Идея состоит в том, что в вашем schema.xml есть фильтры, которые предварительно обрабатывают входные данные, но подстановочные запросы их не используют; посмотрите, как Solr работает с подстановочными запросами:

http://solr.pl/en/2010/12/20/wildcard-queries-and-how-solr-handles-them/ («Обработка Solr и подстановочных знаков»).

1 голос
/ 07 февраля 2011

Другой альтернативой является использование NGrams и TokenFilterFactories, в частности EdgeNGramFilterFactory. .

Это создаст индексы для нграмм или частей слов. Документы с минимальным размером 5 и максимальным размером 8 будут индексироваться: Документы Документа Документа

Существует небольшая разница в размере и времени индекса. Одна из книг Solr цитирует в качестве приблизительного руководства: индексация занимает в 10 раз больше времени Использует в 5 раз больше дискового пространства Создает в 6 раз больше отдельных терминов.

Тем не менее, EdgeNGram будет лучше, чем это.

Вам необходимо убедиться, что вы не вводите подстановочный знак в своих запросах. Поскольку вы не выполняете поиск по шаблону, вы соответствуете поисковому термину в ngrams (части слов).

0 голосов
/ 03 ноября 2016

Из того, что я прочитал, подстановочные знаки соответствовали только словам с дополнительными символами после поискового запроса. «Gatorade *» будет соответствовать Gatorades, но не самому Gatorade. Похоже, что было обновление для Solr в версии 3.6, которое учитывает это, используя тип поля 'multiterm' вместо поля 'text'.

Лучшее описание здесь:

http://bensch.be/the-solr-wildcard-problem-and-multiterm-solution

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...