Предложения проверки орфографии Solr / Lucene на основе нескольких полей - PullRequest
3 голосов
/ 02 сентября 2011

У меня есть база данных с информацией о поставщике: имя и адрес (поля адреса, города, почтового индекса и страны).Мне нужно найти эту базу данных и вернуть некоторых поставщиков.В поле поиска пользователь может ввести все, что угодно: имя поставщика, часть адреса, город, почтовый индекс, ... И, если я не могу найти какие-либо результаты, мне нужно внедрить Google как "Вы имели в видуmsgstr "особенность, чтобы дать предложение пользователю.

Я думал об использовании Solr / Lucene для этого.Я установил Solr, экспортировал необходимую информацию с помощью файла CSV и создал индексы на основе этого файла.Теперь я могу получать предложения из поля Solr, используя solr.SpellCheckComponent.Дело в том, что мое предложение основано на одном поле, и оно мне нужно для получения информации из полей адреса, города, почтового индекса, страны и имени.

В конфигурационном файле solr у меня есть что-то вроде этого:

<searchComponent name="spellcheck" class="solr.SpellCheckComponent">
<str name="queryAnalyzerFieldType">textSpell</str>

<lst name="spellchecker">
    <str name="name">default</str>
    <str name="field">name</str>
    <str name="spellcheckIndexDir">spellchecker</str>
</lst>
</searchComponent>

<requestHandler name="/spell" class="solr.SearchHandler" startup="lazy">
    <lst name="defaults">
        <str name="spellcheck.onlyMorePopular">false</str>
        <str name="spellcheck.extendedResults">false</str>
        <str name="spellcheck.count>1</str>
    </lst>
    <arr name="last-components">
        <str>spellcheck</str>
    </arr>
</requestHandler>

Я могу выполнять такие запросы, как:

http://localhost:8983/solr/spell?q=some_company_name&spellcheck=true&spellcheck.collate=true&spellcheck.build=true

Кто-нибудь знает, как изменить мой конфигурационный файл, чтобы получать предложения из нескольких полей?

Спасибо !!!

Ответы [ 2 ]

6 голосов
/ 20 мая 2012

Чтобы настроить проверку орфографии Solr на использование слов из нескольких полей, необходимо:

  1. Объявить новое поле. Объявление нового поля должно использовать свойства type = "textSpell" и multiValued = "true". Например: <field name="didYouMean" type="textSpell" indexed="true" multiValued="true"/>.
  2. Скопируйте все поля, из которых их слова должны быть частью индекса проверки орфографии, в новое поле. Например: <copyField source="field1" dest="didYouMean"/> <copyField source="field2" dest="didYouMean"/>.
  3. Настройте Solr для использования нового поля. Сделайте это, установив имя поля для использования имени поля проверки орфографии Например: <str name="field">didYouMean</str>.

Для получения более подробной информации посетите Соединение проверки орфографии Solr из нескольких полей

6 голосов
/ 02 сентября 2011

Для этого вы используете copyfield в schema.xml. <copyField source="*" dest="contentSpell"/> скопирует все поля в contentSpell.

Затем измените <str name="field">name</str> на <str name="field">contentSpell</str> ru, вы получите предложения из всех полей.

...