2014-08-28 2 views
1

Я новичок в Solr, и у меня возникла странная проблема.Solr не ищет слова, оканчивающиеся на «e»

Когда я ищу слова, оканчивающиеся на «e», он не возвращает результатов. Например:

Предположим, что на БД есть запись «QWERTY». Когда слово поиска «QWERT», оно возвращает запись «QWERTY». Когда слово поиска «QWERTY», оно возвращает запись «QWERTY». (исправить)

Предположим, что на БД имеется запись «ABCDE». Когда слово поиска «ABCD», оно возвращает запись «ABCDE». Когда слово поиска «ABCDE», оно ничего не возвращает !!

Я нашел некоторые проблемы, связанные с «solr ignores last letter» и некоторыми подобными вещами, но не нашел что-то связанное с этим.

Я использую Solr 0.9.2.2 (проект 3-х лет), Rails 3.2.2, Apache 2.2.22 и Ubuntu 12.04 LTS

Любые идеи ??

Спасибо!

--Edit-- Схема: http://www.speedyshare.com/khdcr/schema.xml

Запрос: QUERY_STRING = ("%" + PARAMS [: Nome] + "%"). Upcase produto_busca = Estoque :: Produto.of (current_empresa) .where («nome LIKE?» или «est_produtos.nome_fantasia LIKE?», query_string, query_string) .order («nome ASC»)

Существует несколько запросов с той же проблемой. Это всего лишь пример.

+1

Нужна Solr schema.xml и запрос, который вы используете – arun

+0

Я отредактировал сообщение с запросом и схемой. – Laerte

ответ

1

Через несколько недель я нашел решение этой проблемы.

Lucene Solr имеет фильтр под названием Stemming. Этот фильтр в основном фиксирует «корень» слов. Она удаляет некоторые буквы, чтобы сделать это, например:

ключевые моменты о моей системе:

  • Язык: Португальский
  • Не индексирование полного текста, просто несколько слов.

Раствор для удаления Исходя из Solr схемы (Solr/CONF/schema.xml):

<fieldType name="text" class="solr.TextField" omitNorms="false"> 
    <analyzer type='index'> 
    <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
    <filter class="solr.ASCIIFoldingFilterFactory"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    <filter class="solr.NGramFilterFactory" minGramSize="2" maxGramSize="15" /> 
    </analyzer> 
    <analyzer type="query"> 
    <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
    <filter class="solr.ASCIIFoldingFilterFactory"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    </analyzer> 
</fieldType> 

Новый код в основном разделял слова от "белых пространств", изменить специальные characteres на регулярной (a -> a), поместите все буквы в нижний регистр (Aaa -> aaa) и используйте фильтр NGram (abc -> ab bc abc ...).

(Список литература: https://cwiki.apache.org/confluence/display/solr/Filter+Descriptions)

Надеется, что это помогает ...

Ps: Есть версии Морфологического на несколько языков.

Смежные вопросы