`
qindongliang1922
  • 浏览: 2189058 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
7265517b-f87e-3137-b62c-5c6e30e26109
证道Lucene4
浏览量:117677
097be4a0-491e-39c0-89ff-3456fadf8262
证道Hadoop
浏览量:126079
41c37529-f6d8-32e4-8563-3b42b2712a50
证道shell编程
浏览量:60034
43832365-bc15-3f5d-b3cd-c9161722a70c
ELK修真
浏览量:71405
社区版块
存档分类
最新评论

solr4.3之检索建议suggest功能

    博客分类:
  • Solr
阅读更多
上篇文章,比较详细的介绍了拼写检查的功能,本篇笔者就来说一下检索建议的功能,可能好多才学的solr的人,都容易把二者搞混,误以为他们是同一个东西,其实不然,他们的侧重点,还是不同的,拼写检查就是用来检查用户输入的检索内容是否存在,如果不存在则,给它提示出相近,或相似的内容,而检索建议则是用户输入某个检索条件后,会立刻友好的给出一系列提示内容,并推荐首个出现的相似的词,作为推荐词。如果这个条件想关的东西一个都没有,则不会提示,所以某种意义上来说,可以在用户输入检索条件时使用suggest,而在点击完搜索时,使用拼写检查,二者结合给可以用户带来比较好的用户体验!


检索建议(suggest)是依附于拼写检查组件实现的功能,所以呢SpellCheck这个组件很重要,拼写检查可以作为一个功能,单独使用,但是suggest功能就不可以,必须的在拼写检查组件存在的时候可以用,否则再启动tomcat时,会报一个未知的SpellCheck组件异常。

下面开始进入正题,suggest的配置相对简单,主要也是由两种形式,第一种只能用主索引库里面存在的建议词,作为提示。第二种使用自定义的建议词库作为建议词,自定义的建议词文本,放在跟solrconfig.xml同一级目录下即可


F:\tomcat\webapps\solr\solr_home\collections\collection1\conf\suggest.txt 


下面给出suggest在solrconfig.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">my_word</str>  
        <float name="threshold">0.0001</float> 
        <!-- 使用自定义suggest词库词可以将如下两行的注释取消 	
        <str name="sourceLocation">suggest.txt</str> 
        <str name="spellcheckIndexDir">spellchecker</str>
		-->	
        <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">10</str>    
        <str name="spellcheck.onlyMorePopular">true</str>  
        <str name="spellcheck.extendedResults">false</str>        
        <str name="spellcheck.collate">true</str>  
        <!--<str name="spellcheck.build">true</str>  -->    
    </lst>    
    <arr name="components">    
        <str>suggest</str>    
    </arr>    
  </requestHandler>


至此,我们就可以启动solr服务,在UI页面使用/suggest请求,进行测试,下面给出solrj的代码

 public List<String> suggest(String word)throws Exception{
		
		List<String>  wordList=new ArrayList<String>();
		SolrQuery query = new SolrQuery();
		query.set("q", "my_word:"+word);//查询的词
		query.set("qt", "/suggest");//请求到suggest中
		query.set("spellcheck.count", "10");//返回数量
		QueryResponse	rsp = server.query(query);
	  //  System.out.println("直接命中:"+rsp.getResults().size());             	 
		//…上面取结果的代码
	    SpellCheckResponse re=rsp.getSpellCheckResponse();//获取拼写检查的结果集
		
		if (re != null) {
		    for(Suggestion s:re.getSuggestions()){
		     List<String> list=s.getAlternatives();//获取所有 的检索词
		     for(String spellWord:list){
		    	 System.out.println(spellWord);
		    	 wordList.add(spellWord);
		     }
		     
		     return wordList;//建议词汇
		    }
		    
		    
		// List<Collation> list=re.getCollatedResults();//
		   String t=re.getFirstSuggestion(word);//获取第一个推荐词
		   System.out.println("推荐词:"+t);
//		 for(Collation c:list){
//			 
//			 System.out.println("推荐词:"+c.getCollationQueryString());
//		 }
		 
		}
		
		return null;
		
	}



最后,我们就在 WEB项目中,使用ajax+suggest+keyup事件,就可以实现类似百度输入框的功能了。


分享到:
评论

相关推荐

    solr4.3源代码一

    Solr4.3是Apache Solr的一个早期版本,它是一个基于Lucene的全文搜索服务器,提供了高可配置、可扩展的搜索和分析功能。Solr4.3源代码的获取通常是为了深入理解其内部工作原理,进行定制开发或优化。在你提供的信息...

    solr4.3源代码二

    在你提供的资料中,"solr4.3源代码二"显然是Solr 4.3版本的源代码包,这将包含Solr的核心组件和相关配置。通过SVN下载的源代码表明,你可以追踪代码的历史版本,这对于理解和解决潜在问题非常有帮助。 首先,我们来...

    solr4.3-ik-analyzer

    solr4.3 分词器 把IKAnalyzer.jar放到solr\WEB-INF\lib下。

    ik-analyzer-5.01-for solr4.3.jar

    ik-analyzer-5.01-for solr4.3.jar

    solr4.3的IK分词器

    最新版solr4.3的IK分词器,中文分词效果良好!对付一般的大众分词没有问题

    Solr4.3 版本中文分词组件

    最高版本的 solr 中文分词配置 , 小弟已经测试过了 里面的 jar 要到各官网上下载

    ik4solr4.3:ik分词器for Solr4.3,支持4.4,二进制不用修改也支持4.6,不放心可以改下POM中的依赖

    ik4solr4.3(不再维护,未来可能删除:请去 ) solr4.3的ik分词器(改了一些smart分词算法。使用maven编译),隔壁有我写的包 支持从solr自己的环境中获取自定义词典(使用solr的ResourceLoader,只需要把字典文件...

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

    Suggest组件则为Solr提供了自动补全和提示功能,极大地提升了用户体验。 标题中的“solr7.5_ik分词器,suggest配置源文件”指的是在Solr 7.5版本中使用Ik分词器和Suggest组件进行配置和使用的源文件。Ik分词器是...

    solr索引和检索性能测试报告

    solr在做检索的时候时常需要得知他的性能参数,此处使用8G内存,双核处理器测试的结果

    基于Solr的分布式全文检索系统的研究与实现.pdf

    Solr作为系统的核心,是一个基于Java开发的企业级搜索应用服务器,它是Apache Lucene的子项目,旨在提供强大的搜索引擎功能。Solr能够通过其索引处理模块,在多台计算机节点上并行创建索引,显著提升了索引的构建...

    人工智能-项目实践-信息检索-基于solr的构件检索与推荐系统 web端应用

    基于solr的构件检索与推荐系统 web端应用 构建步骤 # install dependencies npm install # serve with hot reload at localhost:8080 npm run dev # build for production with minification npm run build

    Solr全文检索.pdf

    Solr 是一个功能强大的全文检索引擎,解决了 MySQL 数据库 I/O 读写瓶颈问题,提高搜索效率,应用于站内搜索,支持多种数据类型格式,实时搜索高效,通过 IK 分词器实现中文分词,通过 SpringDataSolr 实现自动更新...

    在solr文献检索中用map/reduce

    标题中的“在solr文献检索中用map/reduce”指的是使用Apache Solr,一个流行的开源搜索引擎,结合Hadoop的MapReduce框架来处理大规模的分布式搜索任务。MapReduce是一种编程模型,用于处理和生成大型数据集,它将...

    solr大数据检索

    4. **拼写检查:** Solr内置了自动纠错功能,当用户输入错误的关键词时,系统会提供可能的正确拼写建议。 5. **命中高亮:** 在搜索结果中,Solr可以突出显示与查询匹配的关键部分,帮助用户快速定位到相关信息。 ...

    SOLR检索调优

    SOLR 检索调优

    solr全文检索

    Solr全文检索是一种高效、可扩展的开源搜索和分析引擎,由Apache软件基金会开发。它允许用户快速地对大量文本数据进行全文搜索、拼写检查、高亮显示搜索结果等功能。在本压缩包中,包含了关于Solr环境搭建、配置详解...

    solr+IK分词集成tomcat实现全文检索

    本教程将详细阐述如何通过Solr结合IK分词器,在Tomcat服务器上搭建一个功能完备的全文检索系统。 首先,我们需要了解Solr。Solr是Apache Lucene项目下的一个开源搜索服务器,它提供了高性能、可扩展的全文检索、...

Global site tag (gtag.js) - Google Analytics