用于Impl类的Solr建议器AnalyzingInfixLookupFactory

时间:2014-06-05 09:52:35

标签: java search solr lucene search-suggestion

我在使用Solr的建议组件时遇到问题,我想要使用的实现类是AnalyzingInfixLookupFactory,我正在使用它来获取基于中缀的建议而不仅仅是前缀。我还需要Solr将搜索词视为一个标记。但问题是Solr总是根据前缀而不是中缀返回建议。

我在solrconfig.xml中的Suggest组件:

  <searchComponent name="suggest" class="solr.SuggestComponent">
<lst name="suggester">
  <str name="name">mySuggester</str>
  <str name="lookupImpl">AnalyzingInfixLookupFactory</str>      <!-- org.apache.solr.spelling.suggest.fst -->
  <str name="dictionaryImpl">DocumentDictionaryFactory</str>     <!-- org.apache.solr.spelling.suggest.HighFrequencyDictionaryFactory --> 
  <str name="field">movie_name</str>
  <str name="weightField">movie_meter</str>
  <str name="buildOnCommit">true</str>
  <str name="suggestAnalyzerFieldType">text_general</str>
</lst>

schema.xml中的text_general:

  <fieldType name="text_general" class="solr.TextField" positionIncrementGap="100">
  <analyzer type="index">
    <tokenizer class="solr.KeywordTokenizerFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
  <analyzer type="query">
    <tokenizer class="solr.KeywordTokenizerFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>   
  </analyzer>
</fieldType>

2 个答案:

答案 0 :(得分:4)

我知道这是很久以前的问题,但无论如何,这是我的答案。

在上面的solrconfig.xml中使用以下分析器字段类型:

<str name="suggestAnalyzerFieldType">text</str>
<str name="queryAnalyzerFieldType">text_suggest</str>

然后在schema.xml中:

<fieldtype name="text" class="solr.TextField">
  <analyzer>
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
</fieldtype>

<fieldtype name="text_suggest" class="solr.TextField">
      <analyzer>
        <tokenizer class="solr.KeywordTokenizerFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.TrimFilterFactory"/>
      </analyzer>
    </fieldtype>

答案 1 :(得分:1)

对于Solr版本6.6。
它有点晚了,但对其他人有用。 我想配置搜索字段&#34; product_name&#34;。
solrconfig.xml中

#import "ClassB.h"

<强>管理型模式

<searchComponent name="suggest" class="solr.SuggestComponent">
      <lst name="suggester">
        <str name="name">productSuggester</str>
        <!--<str name="lookupImpl">FuzzyLookupFactory</str> -->
        <str name="lookupImpl">AnalyzingInfixLookupFactory</str> -->
        <str name="dictionaryImpl">DocumentDictionaryFactory</str>
        <str name="field">product_name</str>
        <!-- <str name="weightField">price</str> -->
         <str name="buildOnCommit">true</str>
        <str name="suggestAnalyzerFieldType">text_suggest</str>
        <str name="buildOnStartup">true</str>
        <str name="highlight">false</str>
      </lst>
    </searchComponent>