Подтвердить что ты не робот

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

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

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

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

4b9b3361

Ответ 1

Я предполагаю, что ваше поле является 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>

Ответ 2

Отключите stemming.

Ответ 3

Чтобы отключить вывод в файле 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

Ответ 4

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

<fieldType class="solr.StrField" name="string" omitNorms="true" sortMissingLast="true" />

Ответ 5

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

Пример:

имя ядра: core1 Ключ: namestring

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