`
eksliang
  • 浏览: 599477 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论
阅读更多
转载请出自出处:http://eksliang.iteye.com/blog/2097924

solr suggest检查建议  

1.描述

        Solr从1.4开始便提供了检查建议,检索建议目前是各大搜索的标配应用,主要作用是避免用户输入错误的搜索词,同时将用户引导到相应的关键词搜索上。Solr内置了检索建议功能,它在Solr里叫做Suggest模块.该模块可选择基于提示词文本做检索建议,还支持通过针对索引的某个字段建立索引词库做检索建议。在诸多文档中都推荐使用基于索引来做检索建议,当然在预研时我会将其全部弄出来。

 

2.应用场景

    直接上图说得清楚,如下,当你在搜索框中输入spring时出现如下结果,这便是检察建议



 

 
 

3.针对索引的某个字段建立索引词库,做检索建议

 

其实suggest是一个Component组件类,而组件类有一个特点,那就是他是绑定handler类上面执行的,即在handler调用的时候,会触发handler上面组件类跟着一起执行。

在solrcong.xml加入如下代码:

 

<searchComponent name="suggest" class="solr.SpellCheckComponent">
	<str name="queryAnalyzerFieldType">string</str>
	<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.tst.TSTLookup</str>  
		<str name="field">userName</str>
		<float name="threshold">0.0001</float>
        <str name="comparatorClass">freq</str>
        <str name="buildOnOptimize">true</str>
		<str name="buildOnCommit">true</str>     
	</lst>  
</searchComponent>  
 

 

 

<requestHandler name="/suggest" class="org.apache.solr.handler.component.SearchHandler">
     <lst name="defaults">
        <str name="spellcheck">true</str>
        <str name="spellcheck.dictionary">suggest</str>
        <str name="spellcheck.count">8</str>    
        <str name="spellcheck.onlyMorePopular">true</str>  
        <str name="spellcheck.collate">true</str> 
      </lst>
     <arr name="components">
         <str>suggest</str> 
     </arr>    
  </requestHandler>
     各个参数解释如下
SpellCheckComponent含义如下:蓝色部分不要管他,他的值就让他固定

 

名称 含义
queryAnalyzerFieldType

schema.xml中的fieldType类型,如果加了这个选项,拼写检查时会调用这个fieldType的分词器,如果没有加,solr会取field属性上面filetype的分词器,这个时候还找不到,solr会创建一个按空格进行分词(SpellCheckComponent需要一个分词器才能运行),在这们项目中,我们现希望Analyzer不对查询做任何的改变,因此选择string。(网上也建议不要对他定义复杂的分词,如果指定的Analyzer很复杂的话,会导致suggest返回的结果不符合预期)

name 就是取个名字,江湖中的人士都是让他等于suggest
classname org.apache.solr.spelling.suggest.Suggester(不要改动)
lookupImpl org.apache.solr.spelling.suggest.tst.TSTLookup(不要改动)
field

说明只在这个字段上面做拼写检查

threshold

限制一些不常用的词出现,值越大过滤词就越多,取值范围【0~1】官网默认是0.005

comparatorClass

ellchecker组件中的comparatorClass参数可配置Suggest返回结果的排序,目前有如下几种可选方案:

  1. Empty – in which case the default is used.  默认就是这个
  2. score – explicitly choose the default case  
  3. freq – Sort by frequency first, then score. 通过频率的第一排序,然后得分 (开发时用这个)
  4. A fully qualified class name – Provide a custom comparator that implements Comparator
buildOnCommit

取值true或者flase

当commit的时候,对拼写检查索引进行构建。(只有构建后,拼写检查才有效果)

buildOnOptimize

当optimize的时候,对拼写检查索引进行构建。(只有构建后,拼写检查才有效果)

 

 requestHandler参数含义:

<str name="spellcheck">true</str>                         

开启检查建议                           

<str name="spellcheck.dictionary">suggest</str>  

必须与searchComponent中spellchecker标签下<str name=”name”>suggest</str>配置对应。

 

 

<str name="spellcheck.count">8</str>  

配置拼写检查提示结果的个数(可以根据需要适当加大)

 

<str name="spellcheck.onlyMorePopular">true</str>

等于true,可以根据权重排序,开发时我一般让他等于true

 

<str name="spellcheck.collate">true</str>

 提供一个查询并与第一个匹配的建议,还是上图吧

 

<arr name="components"> 

         <str>suggest</str> 

 </arr>  

handler拥有的 components,first-components,last-components这三个属性的剖析

Solr的handler都是同过这三个属性来取他所依赖的components(组件)

备注:handler在运行时,会加载5个默认的组件

1.如果配置了components,则SOlr不会运行默认的5个组件。

 而且你配置的first-components,last-components两个都是无效的。

2.如果配置了first-components,SOlr会给handler添加5个默认的组件时,同时会添加first-components配置的组件,而且这个组件最先工作。

3.同上,只不过放在最后工作

 

 

         配完后记得启动你的服务,添加数据后,当然你得记得commit或者optimize让索引重构一下,才能收到,刚开始我就是少了这步,硬是配不出来;

           还是截个图吧!下面是测试结果

          

 

 

 

 

 4.基于文本做索引词库

   这个时候SpellCheckComponent应该这样配:

    

<searchComponent name="suggest" class="solr.SpellCheckComponent">
      <str name="queryAnalyzerFieldType">string</str>
          <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.tst.TSTLookup</str>
            <str name="field">userName</str>
            <float name="threshold">0.0001</float>
            <str name="sourceLocation">suggest_dict.txt</str>
            <str name="spellcheckIndexDir">spellchecker</str>
            <str name="comparatorClass">freq</str>
            <str name="buildOnOptimize">true</str>
          </lst>
 </searchComponent> 

 

    其实就是在上面的那个“针对索引的某个字段建立索引词库”的xml上面加了两个参数

<str name="sourceLocation">suggest_dict.txt</str>
<str name="spellcheckIndexDir">spellchecker</str>

 

   这两个参数的含义:

     sourceLocation:就是你需要检查建议的文档内容,格式如下:

    

# This is a sample dictionary file. 注释
spring2.5.6
spring3.2.0
struts1.2
struts2.3
baidu.com
iteye.com

 

    spellchekIndexDir:检查建议的索引文件目录, solr在启动时,会创建该文件夹,存放检查建议的索引在

  该文件夹下,像我上面配的那么会在data目录下面生成改文件夹。 

    

    requestHandler配置如下:在上面的文档里面加个配置说明就可以了,也可以不加,不过你每次请求之前都要commit或者optimize下;

     代码如下:

    

<requestHandler name="/suggest" class="org.apache.solr.handler.component.SearchHandler">
     <lst name="defaults">
        <str name="spellcheck">true</str>
        <str name="spellcheck.dictionary">suggest</str>
        <str name="spellcheck.count">8</str>    
        <str name="spellcheck.onlyMorePopular">true</str>  
        <str name="spellcheck.collate">true</str> 
        <str name="spellcheck.build">true</str> 
      </lst>
     <arr name="components">
         <str>suggest1</str> 
     </arr>    
  </requestHandler>

 

 含义如下:就是你每次请求时,如果索引发生变化,都会来重构spellchecker的索引

 

5.solrj对suggest的支持

public class SuggestTest {
	public static void main(String[] args) throws SolrServerException {
		ServiceFacetory facet= ServiceFacetory.getInstance("userManager","http://192.168.238.132:8080//solr");
		SolrSupport s= facet.getSolrSupport();
		/**
		 * 我对solrj做过二次开发,你可以自己得到你的 HttpSolrService,这个相信不难
		 */
		HttpSolrServer service= s.getHttpSolrServer();
		
		SolrQuery params = new SolrQuery();
		params.set("qt", "/suggest");
		params.setQuery("userName:spring");
		QueryResponse response = null;  
		response = service.query(params);  

        SpellCheckResponse suggest = response.getSpellCheckResponse();  
        List<Suggestion> suggestionList = suggest.getSuggestions();  
        for (Suggestion suggestion : suggestionList) {  
            System.out.println("Suggestions NumFound: " + suggestion.getNumFound());  
            System.out.println("Token: " + suggestion.getToken());  
            System.out.print("Suggested: ");  
            List<String> suggestedWordList = suggestion.getAlternatives();  
            for (String word : suggestedWordList) {  
                System.out.println(word + ", ");  
            }  
            System.out.println();  
        }  
}

   执行结果如下:

    

Suggestions NumFound: 2
Token: spring
Suggested: spring2.5.6, 
spring3.2.0, 

 

 

 

  • 大小: 8.3 KB
  • 大小: 31.3 KB
  • 大小: 48.1 KB
分享到:
评论
3 楼 limeng650419 2016-12-21  
limeng650419 写道
然而并未卵

并不管用
2 楼 limeng650419 2016-12-21  
然而并未卵
1 楼 漂泊一剑客 2015-07-20  
太喜欢博主的文章了

相关推荐

    solr7.5_ik分词器,suggest配置源文件文件

    4. 查询建议:在查询请求中添加Suggest请求参数,Solr会返回匹配的建议结果。 描述中提到“已经配置好了,可以在Windows/Linux直接启动”,这意味着所有必要的配置工作都已经完成,用户只需下载解压后的`solr-7.5.0...

    solr cloud6.1.0拼音分词

    Solr Cloud 6.1.0 是 Apache Solr 的一个版本,它是一个开源的企业级搜索平台,被广泛用于构建高效、可扩展的全文检索服务。在这个版本中,它支持拼音分词,使得中文搜索能力得到显著提升。拼音分词是处理中文文本的...

    解决solr启动404问题

    总之,解决Solr启动404问题需要检查多个方面,包括但不限于Java环境、`solrhome`配置、核心配置文件、端口设置以及可能的容器化部署问题。仔细排查并按照上述步骤操作,通常都能找出问题所在并修复。如果问题持续...

    Apache Solr(solr-8.11.1.tgz)

    同时,你可以利用Solr的 faceting(分面搜索)、highlighting(高亮显示)、spell checking(拼写检查)等功能来提高用户体验。此外,Solr还支持实时添加和更新文档,以及高效的近实时搜索。 在部署和使用Solr时,...

    solr4.7服务搭建

    2. **检查 classes 文件夹**:在 `D:\solr\tomcat7\webapps\solr\WEB-INF` 目录下确认是否存在 classes 文件夹,如果没有,请创建。 #### 六、配置 log4j.properties 文件 1. **复制 log4j.properties 文件**:将 ...

    Apache Solr(solr-8.11.1.zip)

    Apache Solr是一款开源的企业级搜索平台,由Apache软件基金会维护。它是基于Java的,提供了高效、可扩展的全文检索、数据分析和分布式搜索功能。Solr-8.11.1是该软件的一个特定版本,包含了从早期版本到8.11.1的所有...

    solr(solr-9.0.0.tgz)

    Solr,全称为Apache Solr,是Apache软件基金会的一个开源项目,主要用来处理全文搜索和企业级的搜索应用。它基于Java,利用Lucene库构建,提供了高效、可扩展的搜索和导航功能。Solr-9.0.0是该软件的最新版本,此...

    solr.war包solr.war包solr.war包solr.war包solr.war包

    solr.warsolr.war包solr.war包solr.war包solr.war包solr.war包solr.war包solr.war包solr.war包solr.war包solr.war包solr.war包solr.war包solr.war包solr.war包solr.war包solr.war包solr.war包solr.war包solr.war包...

    solr(solr-9.0.0-src.tgz)源码

    - **拼写纠正**:利用SpellChecker组件提供拼写建议。 - **高亮显示**:突出显示查询结果中的关键词。 - **近实时搜索**(NRT):在数据更新后,几乎立即反映在搜索结果中。 7. **优化与性能** - **缓存机制**...

    solr-6.2.0源码

    Solr是Apache软件基金会开发的一款开源全文搜索引擎,它基于Java平台,是Lucene的一个扩展,提供了更为方便和强大的搜索功能。在Solr 6.2.0版本中,这个强大的分布式搜索引擎引入了许多新特性和改进,使其在处理大...

    solr服务器_solr_

    Solr服务器是Apache Lucene项目的一个子项目,是一款开源的企业级搜索平台,专门用于处理大量文本数据的全文检索、搜索和分析。它基于Java开发,能够处理多种数据源,包括XML、JSON、CSV等,提供了高效、可扩展的...

    solr搜索自动补全

    开发者需要在Solr端配置相应的自动补全逻辑,通常需要使用Solr的suggester组件,它支持多种搜索建议算法,比如Term Query Suggester、Document Lookup Suggester等。 5. 执行效果。在前端页面配置完成后,当用户...

    solr-smart-suggest:用于智能自动建议的 Solr 插件

    solr-smart-建议您需要将以下 jar 文件包含到类路径中以编译 solr-smart-suggest 组件: lucene-core-4.10.3-SNAPSHOT.jar lucene-analyzers-common-4.10.3-SNAPSHOT.jar lucene-suggest-4.10.3-SNAPSHOT.jar solr-...

    solr-4.4.0.tgz

    - 使用 Solr 提供的监控工具来检查系统状态,如查询响应时间、内存使用情况等。 - 根据系统负载和性能需求,调整 Solr 的配置参数,例如增加索引段大小、调整缓存设置等。 以上就是 Solr 4.4.0 版本的主要知识点...

    java进阶Solr从基础到实战

    6. Suggest查询 7. SolrJ 章节三:Solr高级(上) 1. Solr Cloud 2. 函数查询 3. 地理位置查询 4. JSON Facet 章节四:Solr高级(下) 1. 深度分页 2. Solr Join查询 3. 相关度排序 4.Solr缓存 5.Spring Data Solr ...

    solr

    根据提供的信息,我们可以总结出以下关于Apache Solr的相关知识点: ### Apache Solr简介 Apache Solr是一款开源的、高性能的企业级搜索平台,基于Lucene库构建。它支持高度可配置的全文检索与分析,并提供了丰富...

    solr-4.10.3.rar

    它提供了全文检索、命中高亮、拼写检查、缓存、近实时搜索等特性,广泛应用于网站内容搜索、电子商务产品搜索等领域。本次分享的资源是Solr的4.10.3版本。 Solr 4.10.3是一个稳定版本,它包含了之前版本的所有修复...

    solr的学习

    ### Solr 学习知识点详解 #### 一、Solr 概述 - **定义**:Solr 是 Apache 下的一个顶级开源项目,采用 Java 开发,它是基于 Lucene 的全文搜索服务器。Solr 可以独立运行在 Jetty、Tomcat 等 Servlet 容器中。 -...

    ambari离线安装solr所需文件

    8. **验证安装**:安装完成后,可以通过Ambari的监控功能检查Solr服务是否正常运行,以及执行一些基本的搜索操作来验证功能。 9. **维护与更新**:如果需要升级或调整Solr,可以按照类似的过程离线升级服务,同时...

    solr安装包下载地址

    对于初学者,建议先尝试运行`example`目录中的示例,了解Solr的基本结构和配置。在实际生产环境中,你可能需要自定义Solr配置,如修改`server/solr/configsets`下的配置文件,创建新的核心,或者设置分布式搜索集群...

Global site tag (gtag.js) - Google Analytics