2017-01-02 4 views
0

Я пытаюсь реализовать PorterStemFilterFactory в моем анализаторе во время индексирования. Но когда я запрашиваю документы, на выходе нет документов, которые я получил до добавления вышеуказанного анализатора. Как я могу получить документы с обоими стерилизации и нормальных фильтров.Solr поиск не сохраняющихся документов

схема:

<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100" multiValued="true"> 
    <analyzer type="index"> 
    <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
      <charFilter class="solr.PatternReplaceCharFilterFactory" pattern="[^a-zA-Z0-9]" replacement=" "/> 
     <filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/> 
     <filter class="solr.LowerCaseFilterFactory"/> 
<filter class="solr.PorterStemFilterFactory"/> 
    </analyzer> 
    <analyzer type="query"> 
     <tokenizer class="solr.StandardTokenizerFactory"/> 
     <filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/> 
     <filter class="solr.SynonymFilterFactory" expand="true" ignoreCase="true" synonyms="synonyms.txt"/> 
     <filter class="solr.LowerCaseFilterFactory"/> 
    </analyzer> 
    </fieldType> 

при поиске запроса «проворный» с ниже анализатором, он вернулся документы, в которых были найдены запрос.

<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100" multiValued="true"> 
    <analyzer type="index"> 
    <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
      <charFilter class="solr.PatternReplaceCharFilterFactory" pattern="[^a-zA-Z0-9]" replacement=" "/> 
     <filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/> 
     <filter class="solr.LowerCaseFilterFactory"/> 
    </analyzer> 
    <analyzer type="query"> 
     <tokenizer class="solr.StandardTokenizerFactory"/> 
     <filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/> 
     <filter class="solr.SynonymFilterFactory" expand="true" ignoreCase="true" synonyms="synonyms.txt"/> 
     <filter class="solr.LowerCaseFilterFactory"/> 
    </analyzer> 
    </fieldType> 

Заранее спасибо

+0

Приведите пример того, что вы пытаетесь выполнить поиск? что раньше работало? – root545

+0

Спасибо за ответ. Я отредактировал сообщение –

ответ

0

Так PorterStemFilterFactory удаляет общие концовки из слов.

В вашем случае слово agile сокращено до agil.

Здесь вы можете проверить https://tartarus.org/martin/PorterStemmer/voc.txt. (найдите здесь слово agile).

Теперь найдите здесь соответствующий выход после применения Porter Stemming. https://tartarus.org/martin/PorterStemmer/output.txt

Вы увидите, что вы не можете найти слово agile, потому что оно связано с agil.

Вот почему вы не можете найти agile, так как нет документа, который существует с этим словом. попробуйте найти agil, и вы должны увидеть результаты.

+0

Спасибо за ответ. Он работает как вы предложили. Но как я могу запросить «проворный» и получить те же результаты с фильтром стебля, примененным к анализатору. –

+0

Добавьте , чтобы запросить анализатор и попробуйте – root545

+0

Это изменение сработало.thanks –

0

Использование "solr.PorterStemFilterFactory" будет генерировать маркер в agil

Я предлагаю вам использовать

<filter class="solr.EnglishMinimalStemFilterFactory"/>

постфильтр agile будет же agile

используйте фильтры в соответствии с вашими требованиями ,

+0

Спасибо за ответ. Это помогает сопоставить множественные числа. –

+0

@arunabraham correct ... – vinod