【Solr4.7.0学习笔记】系列之一:ik智能分词(需要导入lucene4.7jar包)
2014-04-16 13:15
459 查看
[align=left]/**[/align]
[align=left] * ik分词[/align]
[align=left] * @param userName[/align]
[align=left] * @param i[/align]
[align=left] * @return[/align]
[align=left] */[/align]
[align=left] public List<UserInfo> searchUserInfoList(String userName,int i){[/align]
[align=left] //智能分词-----------------------[/align]
[align=left] CharTermAttribute ta= null; [/align]
[align=left] String params= "";[/align]
[align=left] try { [/align]
[align=left] IKAnalyzer analyzer = new IKAnalyzer(); [/align]
[align=left] //使用智能分词[/align]
[align=left] analyzer.setUseSmart( true);[/align]
[align=left] TokenStream Stream = analyzer.tokenStream("sName" , new StringReader(userName)); [/align]
[align=left] ta=Stream.addAttribute(CharTermAttribute. class);[/align]
[align=left] Stream.reset(); [/align]
[align=left] for (;Stream.incrementToken(); ) { [/align]
[align=left] //userName +="sName:"+ ta+"+";//不可以[/align]
[align=left] //userName +="sName:"+ ta+" ";//可以[/align]
params += "sName:"+ta+"
OR " ;
[align=left] }[/align]
[align=left] Stream.end();[/align]
[align=left] } catch (IOException e1) { [/align]
[align=left] e1.printStackTrace();[/align]
[align=left] }[/align]
[align=left] //-----------------------------end[/align]
[align=left] List<UserInfo> list= new ArrayList<UserInfo>();[/align]
[align=left] UserInfo user= null;[/align]
[align=left] HttpSolrServer server=SolrServer.getInstance ().getServer ();[/align]
[align=left] SolrQuery query= new SolrQuery(); [/align]
[align=left] String para= "";[/align]
[align=left] if(params != null){[/align]
if (params.lastIndexOf("OR" )
!= -1)
[align=left] params= params.substring(0,params.lastIndexOf("OR" ));[/align]
[align=left] para=params;[/align]
[align=left] } [/align]
[align=left] query.addSort( "sNo",ORDER.asc ); [/align]
[align=left] //query.setQuery("sName:"+userName);[/align]
[align=left] query.set( "q",para);//说明:set比setQuery的范围大一些,如果是 ik分词建议用set[/align]
[align=left] query.setStart(i); //设置"其实位置":表示从结果集的第几条数据开始显示。默认下标是0开始[/align]
[align=left] query.setRows(10); //设置每页显示的行数 [/align]
[align=left] //设置高亮显示---------------------[/align]
query.setHighlight( true);//开启高亮功能
[align=left] query.addHighlightField( "sName");//高亮字段[/align]
[align=left] query.setHighlightSimplePre( "<font color=\"red\">"); //渲染标签[/align]
[align=left] query.setHighlightSimplePost( "</font>"); //渲染标签[/align]
[align=left] QueryResponse response;[/align]
[align=left] try {[/align]
[align=left] response=server.query(query); [/align]
[align=left] SolrDocumentList dlist=response.getResults(); [/align]
[align=left] //第一个Map的键是文档的ID,第二个Map的键是高亮显示的字段名 [/align]
[align=left] Map<String, Map<String, List<String>>> map = response.getHighlighting(); [/align]
[align=left] for(int j=0;j<dlist.size();j++){[/align]
[align=left] user= new UserInfo();[/align]
[align=left] SolrDocument d=dlist.get(j); //获取每一个document [/align]
String sName2= this.toString ((
map.get(((Integer)d.get("sNo" )).toString())).get("sName")) ;
[align=left] user.setSname(sName2); [/align]
[align=left] list.add(user);[/align]
[align=left] }[/align]
[align=left] } catch (SolrServerException e) { [/align]
[align=left] e.printStackTrace();[/align]
[align=left] } [/align]
[align=left] return list;[/align]
[align=left] }[/align]
效果:
[align=left] [/align]
[align=left] [/align]
[align=left] * ik分词[/align]
[align=left] * @param userName[/align]
[align=left] * @param i[/align]
[align=left] * @return[/align]
[align=left] */[/align]
[align=left] public List<UserInfo> searchUserInfoList(String userName,int i){[/align]
[align=left] //智能分词-----------------------[/align]
[align=left] CharTermAttribute ta= null; [/align]
[align=left] String params= "";[/align]
[align=left] try { [/align]
[align=left] IKAnalyzer analyzer = new IKAnalyzer(); [/align]
[align=left] //使用智能分词[/align]
[align=left] analyzer.setUseSmart( true);[/align]
[align=left] TokenStream Stream = analyzer.tokenStream("sName" , new StringReader(userName)); [/align]
[align=left] ta=Stream.addAttribute(CharTermAttribute. class);[/align]
[align=left] Stream.reset(); [/align]
[align=left] for (;Stream.incrementToken(); ) { [/align]
[align=left] //userName +="sName:"+ ta+"+";//不可以[/align]
[align=left] //userName +="sName:"+ ta+" ";//可以[/align]
params += "sName:"+ta+"
OR " ;
[align=left] }[/align]
[align=left] Stream.end();[/align]
[align=left] } catch (IOException e1) { [/align]
[align=left] e1.printStackTrace();[/align]
[align=left] }[/align]
[align=left] //-----------------------------end[/align]
[align=left] List<UserInfo> list= new ArrayList<UserInfo>();[/align]
[align=left] UserInfo user= null;[/align]
[align=left] HttpSolrServer server=SolrServer.getInstance ().getServer ();[/align]
[align=left] SolrQuery query= new SolrQuery(); [/align]
[align=left] String para= "";[/align]
[align=left] if(params != null){[/align]
if (params.lastIndexOf("OR" )
!= -1)
[align=left] params= params.substring(0,params.lastIndexOf("OR" ));[/align]
[align=left] para=params;[/align]
[align=left] } [/align]
[align=left] query.addSort( "sNo",ORDER.asc ); [/align]
[align=left] //query.setQuery("sName:"+userName);[/align]
[align=left] query.set( "q",para);//说明:set比setQuery的范围大一些,如果是 ik分词建议用set[/align]
[align=left] query.setStart(i); //设置"其实位置":表示从结果集的第几条数据开始显示。默认下标是0开始[/align]
[align=left] query.setRows(10); //设置每页显示的行数 [/align]
[align=left] //设置高亮显示---------------------[/align]
query.setHighlight( true);//开启高亮功能
[align=left] query.addHighlightField( "sName");//高亮字段[/align]
[align=left] query.setHighlightSimplePre( "<font color=\"red\">"); //渲染标签[/align]
[align=left] query.setHighlightSimplePost( "</font>"); //渲染标签[/align]
[align=left] QueryResponse response;[/align]
[align=left] try {[/align]
[align=left] response=server.query(query); [/align]
[align=left] SolrDocumentList dlist=response.getResults(); [/align]
[align=left] //第一个Map的键是文档的ID,第二个Map的键是高亮显示的字段名 [/align]
[align=left] Map<String, Map<String, List<String>>> map = response.getHighlighting(); [/align]
[align=left] for(int j=0;j<dlist.size();j++){[/align]
[align=left] user= new UserInfo();[/align]
[align=left] SolrDocument d=dlist.get(j); //获取每一个document [/align]
String sName2= this.toString ((
map.get(((Integer)d.get("sNo" )).toString())).get("sName")) ;
[align=left] user.setSname(sName2); [/align]
[align=left] list.add(user);[/align]
[align=left] }[/align]
[align=left] } catch (SolrServerException e) { [/align]
[align=left] e.printStackTrace();[/align]
[align=left] } [/align]
[align=left] return list;[/align]
[align=left] }[/align]
效果:
[align=left] [/align]
[align=left] [/align]
相关文章推荐
- 【Solr4.7.0学习笔记】系列之一:java程序里面,如何用ajax访问solr程序?
- 【Solr4.7.0学习笔记】系列之一:Tomcat7中搭建Solr 4.x(4.7.0)
- 【Solr4.7.0学习笔记】系列之一: java程序里面,如何用submit(非异步)访问solr程序?
- 【Solr4.7.0学习笔记】系列之一:Solrj4.7增删改查+分页
- 【Solr4.7.0学习笔记】系列之一:Facet分组查询
- 【Solr4.7.0学习笔记】系列之一:我的第一个Solr程序
- 【Solr4.7.0学习笔记】系列之一:如何让solr和java程序整合
- 【Solr4.7.0学习笔记】系列之一:solr 竞价排名
- Solr学习总结(八)IK 中文分词的配置和使用
- solr学习笔记-导入mysql数据
- 解决solr4.x搭建ik不能智能分词
- Solr学习总结(八)IK 中文分词的配置和使用
- Solr 学习笔记(三) 数据导入
- solr(二) solr5.5导入Ik分词,导入数据库数据
- solr学习笔记 -- day04 导入数据、自定义类型
- Solr学习笔记之3、Solr dataimport - 从SQLServer导入数据建立索引
- Solr5.2.1学习笔记-3-分词配置
- Solr6.2.1 学习笔记(二)从数据库导入数据
- solr学习笔记-增加mmesg4J中文分词
- Solr学习总结(四)ik分词配置