Поиск номеров / кодов продуктов в Solr - PullRequest
2 голосов
/ 13 декабря 2010

У меня есть текстовое поле, в которое я передаю обычный текст, который содержит коды продуктов (например, FI302010, RR220011 и т. Д.). Я хотел бы иметь возможность искать эти номера продуктов. Я попробовал это в инструменте АНАЛИЗ - и здесь, похоже, это должно быть возможно. Стандартное текстовое поле выполняет разделение слов, которое разделяет коды продуктов на «FI» и «302010», но если то же самое происходит и в запросе, и в индексе, это не должно быть проблемой. Когда я смотрю на браузер схемы, я не могу найти коды продуктов, но я могу найти что-то похожее на основную версию кода (т. Е. 30201 - отсутствует последний 0).

Я пытался использовать разные типы текста (text_ws, textTight и text), но ни один из них не позволил мне выполнить поиск.

Как включить текстовый поиск в тексте?

Спасибо

Ответы [ 3 ]

4 голосов
/ 13 декабря 2010

Похоже, вам нужно настроить это поле для использования solr.KeywordTokenizerFactory в качестве токенизатора.
Поскольку имя на самом деле не передает, этот токенизатор будет обрабатывать базовое поле как один единственный токен, оставляя на месте его с пробелами, переходами от буквы к номеру, с цифры на букву, пунктуацией и всем (если у вас нет символа фильтры для них).

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

<fieldtype name="myProductNumberFIeld" class="solr.TextField">
  <analyzer>
    <!-- can have a few filters of course -->
    <charFilter class="solr.MappingCharFilterFactory" 
       mapping="mapping-ISOLatin1Accent.txt"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <!-- etc. -->

    <!-- That's the main thing you need -->
    <tokenizer class="solr.KeywordTokenizerFactory"/>

  </analyzer>
</fieldtype>

В более общем случае вы захотите определить довольно специфический анализатор для номера продукта, номера детали, UPC и т. Д., Чтобы улучшить отзыв в этих полях, поскольку пользователи не всегда знают о конкретном формате этих идентификаторов ( где знаки препинания и другие разделители, если таковые имеются, должны быть и т. д.).

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

1 голос
/ 14 декабря 2010

Я нашел решение здесь: http://search -with-fast-and-solr.blogspot.com / 2010/12 / maxfieldlength-in-solr.html

Оказалось, что solr усекает документ на 10000 слов - поэтому мне пришлось увеличить параметр maxFieldLength в solrconfig.xml

Спасибо за ваш вклад!

0 голосов
/ 14 декабря 2010

Это на самом деле просто работает с примером конфигурации.

Подводя итоги Solr 1.4.1 и запуская пример конфигурации, вы можете видеть, что, как вы сказали, инструмент анализа показывает, что это работает для стандартного текстового поля.

Затем, чтобыпроверьте, обратите внимание, что поле «функции» в примере схемы имеет тип текста.Отредактируйте один из файлов примеров в apache-solr-1.4.1 / example / exampledocs.Скажите «monitor.xml».Добавьте код продукта в поле функций одного документа.(и пробел с каждой стороны)

Отправьте файл в Solr (используя java -jar post.jar monitor.xml).Теперь иди искать.Оно работает.Проверьте схему браузера.Показать все термины в поле функций.Обратите внимание, что число есть само по себе в сроке.

Все это работает для меня.

Не уверен, что случилось с вашим обозревателем схемы, возможно, опечатка?Числа не остановлены.Если этот завершающий символ - буква o, а не ноль, это может быть вашей проблемой.

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

...