Уточнение поисков Solr, получение точных совпадений? - PullRequest
1 голос
/ 30 апреля 2010

Дневные парни,

Правильно, я создаю довольно сложную (для меня в любом случае) поисковую систему для веб-сайта, используя Solr, хотя я думаю, что этот вопрос довольно прост ...

У меня есть два критерия поиска: местоположение и тип. Я хочу вернуть результаты, которые точно соответствуют типу (буква к букве, без исключений) и тому подобное местоположение.

Мой текущий поисковый запрос выглядит следующим образом

.. / выберите /? Q = местоположение: N1 тип: синий & строки = 100 & fl = *, оценка & debugQuery = true

Это сначала возвращает все синие шрифты, которые соответствуют N1, но затем возвращает любой тип, который соответствует N1, что противоположно тому, что я ищу. Оба поля заданы как textgen в схеме Solr.

Есть указатели?

Приветствия банды

Ответы [ 2 ]

4 голосов
/ 30 апреля 2010

По умолчанию Solr использует оператор OR для объединения условий запроса. Если вам нужны результаты только с location:N1 AND type:blue вместо location:N1 OR type:blue, вам нужно сменить оператора. Самый простой способ изменить это, добавив дополнительный параметр q.op=AND к URL при запросе:

../select/?q=location:N1 type:blue&rows=100&fl=*,score&debugQuery=true&q.op=AND

Вы также можете изменить это для всех запросов, отредактировав файл schema.xml; искать

<solrQueryParser defaultOperator="OR"/>

и измените его на

<solrQueryParser defaultOperator="AND"/>

Возможно, вы также захотите изменить тип поля вашего поля type на то, что не является токенизированным, например string Это обеспечит точное совпадение в этом поле.

<field name="type" type="string" indexed="true" stored="true"/>
2 голосов
/ 30 апреля 2010

Если вы хотите, чтобы предложение «type» было обязательным, вы можете оставить оператор OR в качестве оператора по умолчанию и использовать закодированный знак «+» перед предложением «type»:

./select/?q=location:N1 %2Btype:blue&rows=100&fl=*,score&debugQuery=true
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...