您的位置:首页 > 其它

【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]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: