Press "Enter" to skip to content

Solr实战:Solr搜索建议Suggest使用

Last updated on 2020-04-29

Solr从1.4开始便提供了检查建议,检索建议目前是各大搜索的标配应用,主要作用是避免用户输入错误的搜索词,同时将用户引导到相应的关键词搜索上。通常,我们将其称为搜索联想。其效果如图所示。在Solr中,实现该功能的模块叫做suggest。

幸运的是 solr 也提供了类似的功能,在该功能的基础上,配合 jQuery 或 kissy 的自动完成组件就可以实现类似上面的功能。

Solr 中的 SuggestComponent 为用户提供查询 term 的自动建议。

您可以使用此功能在搜索应用程序中实现强大的自动建议功能。

尽管可以使用拼写检查功能为自动建议行为提供支持,但 Solr 为此功能专门设计了一个 SuggestComponent。

这种方法利用了 Lucene 的 Suggester 实现,并支持 lucene 中所有可用的查找实现。

这个 Suggester 的主要特点是:

  • 查找实现可插入性
  • term 字典可插入性,使您可以灵活地选择词典实现
  • 分布式支持

添加建议搜索组件

第一步是将搜索组件添加到 solrconfig. xml,并告诉它使用 SuggestComponent。下面是一些可以使用的示例代码:

<searchComponent name="suggest" class="solr.SuggestComponent">
<lst name="suggester">
<str name="name">mySuggester</str>
<str name="lookupImpl">FuzzyLookupFactory</str>
<str name="dictionaryImpl">DocumentDictionaryFactory</str>
<str name="field">keyword</str>
<str name="suggestAnalyzerFieldType">text_ik</str>
<str name="buildOnStartup">false</str>
</lst>
</searchComponent>

建议搜索组件参数

建议搜索组件采用多个配置参数。

查找实现的选择(lookupImpl,在建议字典中如何找到 term)和字典实现(dictionaryImpl,term 如何存储在建议字典中)将决定所需的一些参数。

下面是无论使用什么查找或词典实现,都可以使用的主要参数。在下面的部分中提供了每个实现的附加参数。

    • searchComponent name 参数
      搜索组件的任意名称。
    • name 参数
      这个建议的象征性名称。您可以在 URL 参数和 SearchHandler 配置中引用此名称。一个solrconfig.xml文件中可能有多个这样的字符。
    • lookupImpl 参数
      查找实现。有几种可能的实现,在下面的查找实现一节中描述。如果没有设置,默认查找是JaspellLookupFactory
    • dictionaryImpl 参数
      要使用的字典实现。有几种可能的实现,在“ 字典实现 ”一节中有描述。

      如果没有设置,默认的字典实现是HighFrequencyDictionaryFactory。但是,如果使用 sourceLocation,字典的实现将会是FileDictionaryFactory

    • field 参数
      从索引中使用的字段作为建议 term 的基础。如果sourceLocation为空(表示除了 FileDictionaryFactory 以外的任何字典实现),则将使用来自索引中的该字段的 term。

      作为建议的依据,必须存储该字段。

这里我的field字段为keyword 根据自己要搜索的字段自己修改

 

添加 Suggest 请求处理程序

添加搜索组件后,必须添加一个请求处理程序到 solrconfig.xml 中。这个请求处理程序与任何其他请求处理程序一样工作,并允许您为服务建议请求配置默认参数。请求处理程序定义必须包含之前定义的“建议”搜索组件。

<requestHandler name="/suggest" class="solr.SearchHandler" startup="lazy">
<lst name="defaults">
<str name="suggest">true</str>
<str name="suggest.count">10</str>
</lst>
<arr name="components">
<str>suggest</str>
</arr>
</requestHandler>

建议请求处理程序参数

以下参数允许您为建议请求处理程序设置默认值:

  • suggest=true
    这个参数应该总是true,因为我们总是想运行提交给这个处理程序的查询的 Suggester。
  • suggest.dictionary
    在搜索组件中配置的字典组件的名称。这是一个强制参数。它可以在请求处理程序中设置,或者在查询时作为参数发送。
  • suggest.q
    用于建议查找的查询。
  • suggest.count
    指定 Solr 返回的建议数量。
  • suggest.cfq
    上下文过滤器查询,用于根据上下文字段筛选建议 (如果 suggester 支持)。
  • suggest.build
    如果true,它会建立建议索引。这可能只对最初的请求有用;您可能不想在每个请求上建立字典,特别是在生产系统中。如果您想保持您的字典是最新的,您应该使用buildOnCommitbuildOnOptimize参数搜索组件。
  • suggest.reload
    如果true它将重新加载建议索引。
  • suggest.buildAll
    如果true,它会建立所有的建议索引。
  • suggest.reloadAll
    如果true它将重新加载所有的建议索引。

这些属性也可以在查询时被覆盖,或者根本不在请求处理器中设置,并且总是在查询时发送。

上下文过滤:上下文过滤(suggest.cfq)目前只支持AnalyzingInfixLookupFactoryBlendedInfixLookupFactory,并且只有在Document*Dictionary支持的情况下。所有其他的实现将返回未经过滤的匹配,就好像没有请求过滤一样。

示例查询

http://localhost:8983/solr/techproducts/suggest?suggest=true&suggest.build=true&suggest.dictionary=mySuggester&suggest.q=我们

Leave a Reply

Your email address will not be published. Required fields are marked *