`

suggest 输入拼音提示中文1.0.0

    博客分类:
  • Solr
阅读更多

 

转载请注明出处:http://lucien-zzy.iteye.com/admin/blogs/2008291

 

在完成solr的搭建后(solr搭建可以参考这篇:http://lucien-zzy.iteye.com/blog/2002087)

 

我们来看看如何实现suggest输入拼音提示中文的功能:

 

这里我是基于http://lucien-zzy.iteye.com/blog/2002087 这篇来搭建的。

 

第一步:将这俩jar包放入 F:\winsolr\solr_home\solr\collection1\contrib\extraction\lib 中



 jar包见附件

 

第二步:配置 solrconfig.xml 文件,添加以下内容

<searchComponent name="spellcheck" class="solr.SpellCheckComponent">
     <str name="queryAnalyzerFieldType">text_spell</str> 
     <lst name="spellchecker"> 

           <str name="name">default</str>  
           <!--这里指明需要根据哪个字段的索引为依据进行拼写检查。现配置 名为 name 的字段-->  
           <str name="field">text</str>  
           <!--拼写检查索引的目录-->  
           <str name="spellcheckIndexDir">spellchecker</str>  
           <!--当commit的时候,对拼写检查索引进行构建。(只有构建后,拼写检查才有效果)-->  
           <!--当然,也可以选择在optimize的时候,进行构建。那么只需要将"buildOnCommint"换为 "buildOnOptimize"-->  
           <str name="buildOnCommit">true</str> 

         <str name="classname">solr.FileBasedSpellChecker</str>
         <str name="sourceLocation">spellings.txt</str>
         <str name="characterEncoding">UTF-8</str>
        
<!--
       <str name="name">direct</str> 
       <str name="field">text</str> 
       <str name="classname">solr.DirectSolrSpellChecker</str> 
       <str name="distanceMeasure">internal</str> 
       <float name="accuracy">0.5</float> 
       <int name="maxEdits">2</int> 
       <int name="minPrefix">1</int> 
       <int name="maxInspections">5</int> 
       <int name="minQueryLength">2</int> 
       <float name="maxQueryFrequency">0.01</float> 
-->
</lst> 
  </searchComponent> 

  <requestHandler name="/spell" class="solr.SearchHandler" startup="lazy"> 

      <!--默认参数-->  
  <lst name="defaults">  
    <str name="spellcheck.onlyMorePopular">true</str>  
    <str name="spellcheck.extendedResults">false</str>  
    <!--配置拼写检查提示结果的个数(可以根据需要适当加大)-->  
    <str name="spellcheck.count">3</str>  
  </lst>  
  <arr name="last-components">  
    <str>spellcheck</str>  
  </arr>  
<!--
     <lst name="defaults"> 
         <str name="spellcheck.dictionary">direct</str> 
          <str name="spellcheck">on</str>  
	<str name="spellcheck.collate">true</str> 
         <str name="spellcheck.collateExtendedResults">true</str>   
     </lst> 
     <arr name="last-components"> 
       <str>spellcheck</str> 
     </arr> 
-->
   </requestHandler>


  <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">text</str>
        <float name="threshold">0.0001</float>
        <str name="spellcheckIndexDir">spellchecker</str>
        <str name="comparatorClass">freq</str>
        <str name="buildOnOptimize">true</str>
        <!--<str name="buildOnCommit">true</str>-->
    </lst>
	
	<!--用于输入拼音提示功能-->
	<lst name="spellchecker">
        <str name="name">pysuggest</str>
        <str name="classname">shentong.tsearch.spelling.suggest.Suggester</str>
        <str name="lookupImpl">shentong.tsearch.spelling.suggest.py.PYLookup</str>
        <str name="field">text</str>
        <float name="threshold">0.0001</float> 
	<str name="pySuggestIndexDir">suggestIndex</str>
        <str name="comparatorClass">freq</str>
        <str name="buildOnOptimize">true</str>
        <!--<str name="buildOnCommit">true</str>-->
    </lst>
</searchComponent>
<requestHandler  name="/suggest" class="solr.SearchHandler" startup="lazy">
    <lst name="defaults">
        <str name="spellcheck">true</str>
        <str name="spellcheck.dictionary">suggest</str>
        <!-- 这个参数告诉solr,当查询的结果数多于设定的count数时,返回点击数更多的那些 -->
        <str name="spellcheck.onlyMorePopular">true</str>
        <str name="spellcheck.extendedResults">false</str>
        <str name="spellcheck.count">10</str>
        <str name="spellcheck.collate">true</str>
    </lst>
    <arr name="components">
        <str>suggest</str>
    </arr>
 </requestHandler>

 第三步:增加索引

 第四步:结合Ajax 实现suggest(这里只贴出主要的solrj查询代码)

JSONObject json = new JSONObject();
		 //获取请求的实际URL相对于请求的serlvet的url的路径。
         String requesturl = request.getPathInfo();
          //检索建议
		  if(requesturl.indexOf("/suggest") != -1){
			  String data = request.getParameter("data");
			  if(!StringUtil.empty(data)){
				 
				  String url = ConfigUtil.getStringValue("solr_url");
				  SolrjTool solr = SolrjTool.getinstence();
				  solr.init(url);
				  //创建查询对象
				  SolrQuery query = new SolrQuery();
				  query.set("q", data);  //set查询关键词
				  query.set("qt", "/suggest"); //set查询类型为 suggest
				  query.set("spellcheck.count", "10"); //set 查询出的总条数
				  query.set("spellcheck.dictionary", "pysuggest"); 
				  query.set("spellcheck", "on");  
				  query.set("spellcheck.build", "true"); 
				  //执行查询
				  QueryResponse res = solr.execseQuery(query);  	
				  SpellCheckResponse spellCheckResponse = res.getSpellCheckResponse();
				  if (spellCheckResponse != null) {
					   //获取Suggestion集合
					   List<Suggestion> suggestionList = spellCheckResponse.getSuggestions();
					   List<String> suggestedList = new ArrayList<String>();  
					   for (Suggestion suggestion : suggestionList) {
						 //获取索引库集合
					     List<String> suggestedWordList = suggestion.getAlternatives();
					     
					    for (int i = 0; i < suggestedWordList.size(); i++) {
					       String word = suggestedWordList.get(i);
					       
					       suggestedList.add(word);
 
					    }
					     
					   }
					   if(suggestedList.size() >0 ){
				
							  json.put("code", "1");
							  json.put("data", suggestedList);
					   }else{
						   //没有结果
							  json.put("code", "1001"); 
					   }
					    
				  }else{
					  //没有结果
					  json.put("code", "1001"); 
				  }
 
			  }else{
				 //没有检索项 
				json.put("code", "1000");
				  
			  }
			  out.println(json.toString()); 
		  
		  }

 第五步:访问页面查询测试,如图:



 

 

 

 

转载请注明出处:http://lucien-zzy.iteye.com/admin/blogs/2008291

  • 大小: 11.9 KB
  • 大小: 11.1 KB
  • 大小: 11.4 KB
  • 大小: 7.4 KB
  • jar.rar (52.6 KB)
  • 下载次数: 277
2
0
分享到:
评论
15 楼 chyou1988 2016-09-13  
博主,solr 4.6.1 用了 这个拼音包 以后,每次都是重启后拼音台式才能生效
14 楼 a3802893 2015-11-26  
5.3的也不能用,有新版本可以使用的吗?
13 楼 u012183952 2015-04-27  
at shentong.tsearch.spelling.suggest.py.PYLookup.lookup(PYLookup.java:200)
at shentong.tsearch.spelling.suggest.Suggester.getSuggestions(Suggester.java:195)
at org.apache.solr.handler.component.SpellCheckComponent.process(SpellCheckComponent.java:172)
at org.apache.solr.handler.component.SearchHandler.handleRequestBody(SearchHandler.java:208)
at org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:135)
at org.apache.solr.core.RequestHandlers$LazyRequestHandlerWrapper.handleRequest(RequestHandlers.java:242)
at org.apache.solr.core.SolrCore.execute(SolrCore.java:1816)
at org.apache.solr.servlet.SolrDispatchFilter.execute(SolrDispatchFilter.java:656)
at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:359)
at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:155)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:861)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:620)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Thread.java:745)

请问这个是什么问题?
12 楼 1074126612 2015-04-09  
Caused by: java.lang.AbstractMethodError: org.apache.lucene.search.suggest.Lookup.build(Lorg/apache/lucene/search/suggest/InputIterator;)V 楼主这是那里的错误?、??
11 楼 lucien_zzy 2015-01-13  
xuriyunhai 写道
博主能把tsearch_lib.jar的代码共享吗?现在solr升级到4.10.2了,貌似不兼容


        文章下方有jar包下载地址
10 楼 xuriyunhai 2014-12-17  
博主能把tsearch_lib.jar的代码共享吗?现在solr升级到4.10.2了,貌似不兼容
9 楼 lucien_zzy 2014-10-29  
kehuixu 写道
博主,问一下,建议的时候是如何从拼音转换为中文的。真心不明白


核心转换在jar包里
8 楼 yjfeng1133 2014-09-29  
yjfeng1133 写道
建立索引后不能直接得到中文的suggest。
为什么我需要重启solr才能得到中文的suggest?


我用的solr 4.4 hadoop下的solrcloud
7 楼 yjfeng1133 2014-09-29  
建立索引后不能直接得到中文的suggest。
为什么我需要重启solr才能得到中文的suggest?
6 楼 wangyoulin006 2014-09-12  
4.9solr部署报错。麻烦请帮忙看下是什么情况啊。谢谢
java.lang.AbstractMethodError
at org.apache.lucene.search.suggest.Lookup.build(Lookup.java:190)
at shentong.tsearch.spelling.suggest.Suggester.build(Suggester.java:142)
at org.apache.solr.handler.component.SpellCheckComponent.prepare(SpellCheckComponent.java:125)
at org.apache.solr.handler.component.SearchHandler.handleRequestBody(SearchHandler.java:197)
at org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:135)
at org.apache.solr.core.RequestHandlers$LazyRequestHandlerWrapper.handleRequest(RequestHandlers.java:241)
at org.apache.solr.core.SolrCore.execute(SolrCore.java:1962)
at org.apache.solr.servlet.SolrDispatchFilter.execute(SolrDispatchFilter.java:777)
at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:418)
at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:207)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2441)
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2430)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:744)
5 楼 kehuixu 2014-03-11  
博主,问一下,建议的时候是如何从拼音转换为中文的。真心不明白
4 楼 lucien_zzy 2014-01-26  
写得不错,但博主能不能补充一下拼写检查的调用实例


拼写检查类似,query中的 qt 改为 spell 就行。。。
3 楼 lucien_zzy 2014-01-23  
ayongdong 写道
例子的jar包不能下载


可以下载的,直接点击jar.rar就下了
2 楼 ayongdong 2014-01-23  
例子的jar包不能下载
1 楼 sealbird 2014-01-23  
写得不错,但博主能不能补充一下拼写检查的调用实例



=========================================================================================
www.idouye.cn 土木工程网

相关推荐

    Suggest自动提示功能

    总的来说,Suggest自动提示功能通过结合前端的AJAX技术与后端的高效数据查询,为用户提供了一个快速、响应式的输入环境。这种功能在现代Web应用中广泛使用,极大地提升了用户在搜索、填写表单等场景下的操作效率。

    仿携程网城市输入框,支持中文/拼音/3字码 输入的智能提示

    在构建一个类似携程网的城市输入框时,我们面临的核心任务是实现一个功能强大的搜索提示系统,它能够根据用户的输入提供中文、拼音以及三字码的智能提示。这种输入框不仅提高了用户体验,还使得用户能够快速准确地...

    JavaScript Suggest自动补全的输入框下拉提示类

    JavaScript Suggest自动补全的输入框下拉提示类是一种常见的前端开发技术,广泛应用于各种Web应用,如搜索引擎、表单输入、代码编辑器等。它为用户提供了一个方便、高效的交互体验,通过预测用户可能要输入的内容,...

    Kissy Suggest 自动提示例子

    Suggest 组件的核心在于提供快速、智能的输入提示服务,通过分析用户输入的字符,实时显示与之相关的建议列表,帮助用户快速找到目标信息。 首先,我们需要了解 Kissy Suggest 的基本结构。该组件主要由两部分组成...

    suggest 仿google提示

    标题中的“suggest 仿google提示”指的是创建一个类似于Google搜索框自动补全的功能。这个功能在用户输入查询词时,会根据已有的数据提供相关的建议,以提高搜索效率和用户体验。这种技术通常被称为自动完成功能或者...

    ajax实现输入提示(支持中文)

    本文将深入探讨如何使用Ajax实现输入提示功能,尤其关注支持中文的情况。 一、Ajax基础 Ajax的核心是JavaScript对象XMLHttpRequest,它允许在不刷新整个页面的情况下与服务器进行通信。通过创建XMLHttpRequest对象...

    Lucene5学习之Suggest关键字提示

    《深入探索Lucene5:Suggest关键字提示技术》 在信息检索领域,用户输入查询时,提供快速、准确的关键字提示能显著提升用户体验。Lucene,作为Java领域最流行的全文检索库,其5.x版本引入了Suggest组件,用于实现...

    类似google suggest 的搜索提示框

    标题中的“类似Google Suggest的搜索提示框”指的是在用户输入搜索关键词时,搜索引擎自动提供相关的建议词或短语,这种功能在许多网站上被广泛采用,以提高用户体验和搜索效率。Google Suggest是谷歌在其搜索框中...

    KISSY.Suggest 仿百度、淘宝输入提示补全功能的组件及实例

    **KISSY.Suggest** 是一个JavaScript库,用于实现类似于百度和淘宝的输入提示补全功能。这个组件是基于KISSY框架构建的,旨在提供高效、易用且可定制的自动补全体验,适用于网页上的搜索框或者任何需要动态建议的...

    AJAX实现仿Google Suggest搜索提示效果

    在本文中,我们将深入探讨如何使用AJAX技术来实现一个仿Google Suggest的搜索提示功能。Google Suggest是Google搜索引擎中的一个特色功能,它在用户输入关键词时提供实时的搜索建议,极大地提高了搜索效率和用户体验...

    PHP搜索提示search-suggest.zip

    search-suggest 可快速创建你的搜索提示功能 /搜索自动补全功能。功能说明把句子分词后缓存转换成拼音缓存把句子分词后缓存当你输入英文 或者中文的时候,可以从缓存里获取匹配值返回使用 标签:search

    solr cloud6.1.0拼音分词

    拼音分词是处理中文文本的一种策略,它将汉字转换为其对应的拼音,从而允许用户通过输入拼音来搜索相关的中文内容。 在Solr中,拼音分词主要依赖于特定的分析器和过滤器。这些组件在索引和查询阶段处理文本,将汉字...

    仿Google Suggest提示效果

    【标题】"仿Google Suggest提示效果"是一个关于在网页中实现类似Google搜索框自动提示功能的技术分享。这种功能在现代网页应用中非常常见,它能够提升用户体验,帮助用户更快地找到他们想要输入的关键词。 【描述】...

    飞飞模仿google(suggest)下拉提示框v1.6.rar

    【标题】"飞飞模仿google(suggest)下拉提示框v1.6.rar"是一个模拟谷歌搜索下拉提示功能的程序。这个程序旨在为用户提供类似于谷歌搜索引擎的自动填充建议体验,帮助用户更快地找到他们想要搜索的内容。谷歌的下拉...

    简易Google Suggest搜索提示

    【简易Google Suggest搜索提示】是一种基于JavaScript实现的搜索引擎优化技术,它允许用户在输入查询时获取实时的搜索建议。这种技术提高了用户体验,因为它减少了用户输入完整查询词的时间,同时也帮助用户更快地...

    suggest 自动提示

    标题中的“suggest 自动提示”通常指的是在用户输入时提供自动补全或建议的功能,常见于搜索框、编程IDE或各种在线输入场景。这个功能提高了用户体验,减少了输入错误,并且帮助用户快速找到他们想要的内容。 在...

    JQuery插件Suggest,实现类百度智能提示

    JQuery插件Suggest来做那些机票预订网站中的输入智能提示功能,这个功能对于用户体验性来说,挺不错的,用于实现类似百度的智能提示功能也是一个不错的选择。

    文本框Input文字自动完成Suggest提示插件.rar

    文本框Input文字自动完成Suggest提示插件,一款Suggest搜索提示插件,暗藏有淘宝首页、有啊首页、Google搜索首页、来点广告搜索的众多下拉提示,实际上演示效果与其真实网站上的相关无几,使用了Yahoo网站的一个搜索...

    ajax实现输入提示(类似百度和Google的输入提示)

    ajax实现输入提示(类似百度和Google的输入提示) 用法非常简单: 1、在jsp页面引入autosuggest.js文件 2、建一个text文本框 3、写js代码: &lt;script&gt; new actb("tb", loadAllMessage("suggest" , ""), null); 4、这...

Global site tag (gtag.js) - Google Analytics