Поиск слова с заглавными буквами в абзаце с использованием solr - PullRequest
2 голосов
/ 21 февраля 2012

Я использую Solr для поиска.Когда я ищу слово, содержащее заглавные буквы из

описания, оно не показывает никакого результата.Но это дает результат для строчных букв.

Например: если мой запрос q = description: * stack *, я получу результат.Но если запрос

q = description: * Stack *, он не даст никакого результата, даже если описание содержит это слово

Моя схема содержит:

<fieldType name="string" class="solr.TextField">
 <analyzer type="index">
  <tokenizer class="solr.KeywordTokenizerFactory"/>
  <filter class="solr.ASCIIFoldingFilterFactory"/>
  <filter class="solr.LowerCaseFilterFactory" />
  <filter class="solr.ReversedWildcardFilterFactory" />
 </analyzer>
 <analyzer type="query">
  <tokenizer class="solr.KeywordTokenizerFactory"/>
  <filter class="solr.ASCIIFoldingFilterFactory"/>
  <filter class="solr.LowerCaseFilterFactory" />
   <filter class="solr.ReversedWildcardFilterFactory" />
    </analyzer>
</fieldType>

Я хочупоиск и заглавными буквами также ..

Может кто-нибудь мне помочь?

1 Ответ

1 голос
/ 21 февраля 2012

Взгляните на Solr wiki . Там написано:

Добавьте этот фильтр в анализатор индекса, но не в анализатор запросов.

Попробуйте выполнить запрос с помощью debugQuery=on после того, как вы изменили схему, чтобы отразить вики-инструкции:

<str name="querystring">text:*Stack*</str>
<str name="parsedquery">text:#1;*kcatS*</str>

Как видите, ReversedWildcardFilterFactory меняет ваш запрос, даже если он не входит в цепочку вашего анализатора запросов, с fieldType, подобным следующему:

<fieldType name="text" class="solr.TextField">
    <analyzer type="index">
        <tokenizer class="solr.KeywordTokenizerFactory"/>
        <filter class="solr.ASCIIFoldingFilterFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>           
        <filter class="solr.ReversedWildcardFilterFactory" />       
    </analyzer>
    <analyzer type="query">
        <tokenizer class="solr.KeywordTokenizerFactory"/>       
        <filter class="solr.ASCIIFoldingFilterFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>               
    </analyzer>
</fieldType>

Кроме того, LowerCaseFilterFactory не запускается для вашего запроса (S не является строчным в разобранном запросе). То же самое происходит для ASCIIFoldingFilterFactory. Взгляните здесь чтобы узнать больше:

Solr не анализирует запросы, в которых есть символы подстановки. Да это означает, что фильтр LowerCaseFilterFactory, во время индексации, превращает стек в стек, но при выполнении запросов этого не происходит, несмотря на Дело в том, что фильтры определены правильно. И именно поэтому вы не получить результаты поиска.

Самое простое решение, которое приходит мне в голову, это сделать ваши запросы строчными на стороне клиента, прежде чем отправлять их в Solr. Вам также следует учитывать, что ASCIIFoldingFilterFactory также не срабатывает. Вам это действительно нужно?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...