нужна помощь в подсказке apache solr для фраз

я пытаюсь использовать suggeter в своем приложении

пример: у меня есть документы, как показано ниже

apache solr version 4.2
apache hadoop version 2
cassendra nosql db
mysql rdbms 

если я ищу «apa», первые два результата отображаются как предложение, а если строка поиска «apache so», только 1-й отображается как предложение, что, как и ожидалось.

Но

если я ищу «solr», для предложения не отображается результат (я ожидаю, что apache solr версии 4.2)

Мой запрос

http://localhost:8983/solr/colletion/suggest?wt=json&indent=true&spellcheck=true&spellcheck.q=solr

ниже мой тип поля

 <fieldType name="text_general2" class="solr.TextField" positionIncrementGap="100">
      <analyzer type="index">
        <tokenizer class="solr.KeywordTokenizerFactory"/>
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/>
	<filter class="solr.LowerCaseFilterFactory"/>
      </analyzer>
      <analyzer type="query">
        <tokenizer class="solr.KeywordTokenizerFactory"/>
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/>
        <filter class="solr.LowerCaseFilterFactory"/>
      </analyzer>
    </fieldType>

и предложить обработчик запросов в solrconfig.xml

<searchComponent class="solr.SpellCheckComponent" name="suggest">
    <lst name="spellchecker">
      <str name="name">suggest</str>
      <str name="classname">org.apache.solr.spelling.suggest.Suggester</str>
     <str name="lookupImpl">org.apache.solr.spelling.suggest.fst.WFSTLookupFactory</str>
     <str name="field">title2</str>  <!-- the indexed field to derive suggestions from -->
      <float name="threshold">0</float>   
      <str name="buildOnCommit">true</str>
    </lst>
  </searchComponent>
  <requestHandler class="org.apache.solr.handler.component.SearchHandler" name="/suggest">
    <lst name="defaults">
      <str name="spellcheck">true</str>
      <str name="spellcheck.dictionary">suggest</str>
      <str name="spellcheck.onlyMorePopular">true</str>
      <str name="spellcheck.count">8</str>
      <str name="spellcheck.collate">true</str>
    </lst>
    <arr name="components">
      <str>suggest</str>
    </arr>
  </requestHandler>

моя версия Solr 4.2 CDH 4.7

пожалуйста помоги


person Bhuvan    schedule 27.03.2015    source источник


Ответы (1)


Вы используете KeywordTokenizerFactory, который обрабатывает всю строку как один поток. Итак, в вашем случае 1-й документ будет проиндексирован как

apache solr version 4.2

Поскольку ваше автопредложение включено, ваш первый запрос apac и другие, начинающиеся с одного и того же префикса apac, могут соответствовать обеим записям в индексе, начинающимся с него (поскольку у вас включен suggest).

Если вы хотите сопоставить отдельные слова в тексте, вам следует рассмотреть возможность использования другого токенизатора, такого как WhitespaceTokenizerFactory.

Дополнительные сведения: https://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters#solr.KeywordTokenizerFactory< /а>

person Akash    schedule 27.03.2015
comment
Спасибо за ответ .... Я пробовал это. Если я ищу apa, он даст ответ как apache. Но что мне нужно, так это когда я ищу apache, поэтому мне нужен ответ как apache solr версии 4.2, и если я ищу solr, он также должен возвращать apache solr версии 4.2. - person Bhuvan; 27.03.2015