Solr:特定自动完成的多个建议器

标签 solr autocomplete autosuggest

我有以下问题: 我有一个带有多个索引的 Solr 核心。例如,我的网站上有 3 种不同的搜索类型:

  1. 汽车
  2. DVD
  3. 所有元素(汽车、DVD,也许还有其他元素)

我有 Nr.3 的自动建议。 1 和 2 到目前为止还没有建议者。但我想为汽车实现一个额外的建议器,这样当我只想在汽车中搜索时,建议器会向我显示仅属于汽车而不属于 dvd 等的单词。我正在考虑新的 requestHandler 并执行搜索,因为我需要这两个特定字段来填充建议,其中 Nr.3 搜索是通过字典自动填充的。 一个 Solr Core 中是否可以有两个或多个不同的建议器?如何将特定字段用于特定搜索类型的自动完成和建议,以便在这些建议中仅列出汽车属性?

最佳答案

当然,这是可以做到的。只需设置两个搜索组件,如下所示:

<searchComponent name="suggest" class="solr.SuggestComponent">
   <lst name="suggester">
      <str name="name">suggest_cars</str>
      <str name="lookupImpl">BlendedInfixLookupFactory</str>
      <str name="blenderType">linear</str>
      <str name="dictionaryimpl">DocumentDictionaryFactory</str>
      <str name="field">cars_suggest</str>
      <str name="weightField">popularity</str>
      <str name="suggestAnalyzerFieldType">text_suggest</str>
      <str name="queryAnalyzerFieldType">phrase_suggest</str>
      <str name="indexPath">cars_suggest</str>
      <str name="buildOnStartup">false</str>
      <str name="buildOnCommit">false</str>
      <bool name="exactMatchFirst">true</bool>
   </lst> 
   <lst name="suggester">
      <str name="name">suggest_all</str>
      <str name="lookupImpl">BlendedInfixLookupFactory</str>
      <str name="blenderType">linear</str>
      <str name="dictionaryimpl">DocumentDictionaryFactory</str>
      <str name="field">suggest</str>
      <str name="weightField">popularity</str>
      <str name="suggestAnalyzerFieldType">text_suggest</str>
      <str name="queryAnalyzerFieldType">phrase_suggest</str>
      <str name="indexPath">all_suggest</str>
      <str name="buildOnStartup">false</str>
      <str name="buildOnCommit">false</str>
      <bool name="exactMatchFirst">true</bool>
   </lst> 

然后创建一个请求处理程序:

<requestHandler name="/suggest" class="solr.SearchHandler" startup="lazy">
  <lst name="defaults">
      <str name="echoParams">all</str>
      <str name="wt">json</str>
      <str name="indent">false</str>
      <str name="suggest">true</str>
      <str name="suggest.count">10</str>
  </lst>
  <arr name="components">
    <str>suggest</str>
  </arr>
</requestHandler>

在schema.xml文件中,这两种字段类型:

<fieldType name="phrase_suggest" class="solr.TextField" positionIncrementGap="100">
        <analyzer>
          <tokenizer class="solr.KeywordTokenizerFactory"/>
          <filter class="solr.LowerCaseFilterFactory"/>
          <filter class="solr.TrimFilterFactory"/>
        </analyzer>
    </fieldType>

<fieldType name="text_suggest" class="solr.TextField" positionIncrementGap="100">
      <analyzer>
            <tokenizer class="solr.StandardTokenizerFactory"/>
            <filter class="solr.LowerCaseFilterFactory"/>
            <filter class="solr.ASCIIFoldingFilterFactory"/>
            <filter class="solr.EnglishPossessiveFilterFactory"/>
      </analyzer>
    </fieldType>

当然,您需要两个字段 cars_suggest 和 all_suggest 分别包含汽车和汽车/dvds 的建议术语,字段类型为phrase_suggest(即带有关键字标记器)。

查询完成如下:

http://localhost:8983/solr/collection0/suggest?q=peug&suggest.dictionary=suggest_cars

关于Solr:特定自动完成的多个建议器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37971158/

相关文章:

jquery - .autocomplete 不是函数错误

在 Solr 中搜索多值字段为空或具有特定值的文档

bash - 在 bash 中转义斜杠完成

eclipse - 告诉 Eclipse 仅自动完成方法名称?

php - Jquery 自动完成功能不更新选择的输入值

php - 使用 autosuggest 在用户输入他们的输入后使用 jquery 填写输入文本字段

search - 如何让 Solr suggester 也处理拼写错误?

solr - 从页面字段中获取字数频率

solr - django-haystack 和 solr : rebuild_index not adding models to index

Solr/Lucene 查询与上下文的词形还原