【问题标题】:Solr Suggester for Impl Class AnalyzingInfixLookupFactorySolr Suggester for Impl Class AnalyzingInfixLookupFactory
【发布时间】:2014-06-05 09:52:35
【问题描述】:

我在使用 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>

【问题讨论】:

    标签: java search solr lucene search-suggestion


    【解决方案1】:

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

    在上述 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>
    

    【讨论】:

    • 嗨,James,为什么我们需要在 solrconfig.xml 中添加 text 和 text_suggest。我已经尝试了一个示例,并且没有添加 solrconfig.xml 它正在工作。我错过了什么吗?
    • 您好 Nerandra,suggestAnalyzerFieldType 正在使用 StandardTokenizerFactory,因此可以使用该字段中的任何术语输入文本。 queryAnalyzerFieldType 使用 KeywordTokenizerFactory 以便将整个字段作为字符串返回。这在简短的建议字段中很有用,例如作者、标题等。(例如,如果您开始输入 amadeus,它将返回 wolfgang amadeus mozart)
    • 这也适用于空格,所以如果您输入“amadeus mo”甚至“amadeus wo”,它仍然会返回“wolfgang amadeus mozart”
    【解决方案2】:

    适用于 Solr 版本 6.6。
    它有点晚了,但它对其他人有用。 我想配置“product_name”字段的搜索。
    solrconfig.xml

    <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>
    

    托管模式

    <fieldtype name="text_suggest" class="solr.TextField">
          <analyzer>
            <tokenizer class="solr.StandardTokenizerFactory"/>           
            <filter class="solr.LowerCaseFilterFactory" />
            <filter class="solr.ASCIIFoldingFilterFactory"/>
        </analyzer>
     </fieldtype>
    
    <field name="product_name" type="text_suggest" />
    

    【讨论】:

    • 像魅力一样工作
    猜你喜欢
    • 2015-04-13
    • 1970-01-01
    • 2016-10-24
    • 1970-01-01
    • 2017-01-28
    • 1970-01-01
    • 1970-01-01
    • 2021-04-11
    • 1970-01-01
    相关资源
    最近更新 更多