Solr точный поиск слова - PullRequest
       29

Solr точный поиск слова

19 голосов
/ 13 апреля 2010

Я хочу настроить свою поисковую систему Solr, чтобы получить точное соответствие введенному поисковому запросу.

например. «налоги» должны возвращать документы с «налогами», а не «налогом», «налогообложением» и т. д.

Любая помощь или советы будут оценены.

Ответы [ 5 ]

21 голосов
/ 01 марта 2011

Я предполагаю, что ваше поле является TextField, по умолчанию solr выполняет нечеткий поиск в этом поле. Вам нужно настроить поле как строковое поле и не добавлять токенизатор, тогда вы получите точное совпадение.

Вы можете даже комбинировать точный поиск с нечетким поиском и использовать DisMax для увеличения относительного веса.

Пример (schema.xml):

<field name="name"             type="string" indexed="true" stored="false" required="true" />
<field name="nameString"       type="string" indexed="true" stored="false" required="true" />
<copyField source="name" dest="nameString"/>

Пример (solrconfig.xml):

<requestHandler name="accounts" class="solr.SearchHandler">
    <lst name="defaults">
      <str name="defType">dismax</str>
      <str name="qf">
        nameString^10.0 name^5.0 description^1.0
      </str>
      <str name="tie">0.1</str>
    </lst>
  </requestHandler>
4 голосов
/ 13 апреля 2010

Выключить stemming .

3 голосов
/ 15 марта 2014

Чтобы отключить использование в вашем schema.xml, вы можете определить текстовое поле следующим образом:

<types>

   <!-- other fields definition -->

   <fieldType name="text_no_stem" class="solr.TextField" omitNorms="false">
      <analyzer>
          <tokenizer class="solr.StandardTokenizerFactory"/>
          <filter class="solr.StandardFilterFactory"/>
          <filter class="solr.LowerCaseFilterFactory"/>
      </analyzer>
   </fieldType>

   <!-- other fields definition -->

</types>

<fields>

   <!-- other fields definition -->

   <dynamicField name="*_nostem" type="text_no_stem" indexed="true" stored="true"/>

   <!-- other fields definition -->

</fields>

Я использую sunspot для интеграции solr с Ruby on Rails. С помощью этого в schema.xml я определяю свой блок для поиска следующим образом:

searchable do
    text(:wants, as: :wants_nostem)
end
1 голос
/ 06 октября 2015

Используйте кавычки для точного совпадения:

Пример:

Имя ядра: core1 Ключ: именная строка

http://localhost:8983/solr/core1/select?q=namestring:"taxes"&wt=json&indent=true

1 голос
/ 19 января 2015

Используйте поле строки Solr, которое будет выполнять поиск точного значения, например,

<fieldType class="solr.StrField" name="string" omitNorms="true" sortMissingLast="true" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...