浏览 5564 次
精华帖 (0) :: 良好帖 (2) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2011-04-08
最后修改:2011-04-08
百度和google中都有文字的自动补全功能,以前项目中也用过实现思路非常简单一般就是extjs 或者jquery 的前台插件通过异步加载数据然后显示, 现在项目的数据源是基于solr所以只有使用solr的autocomplete功能,搜索了很多无数 百度上的 网页根本没有关于solr的自动补全的功能实现,就连关于solr应用性的文章也是比较少的,无奈只好在google上搞了,全都是英文的,尝试了很多的方法都不能使用最后发现是solr api的问题国外的大部分资料都是用得这个写法 private List<Term> query(String q, int limit) { List<Term> items = null; CommonsHttpSolrServer server = null; try { server = new CommonsHttpSolrServer("http://localhost:8983/solr"); } catch(Exception e) { e.printStackTrace(); } // escape special characters SolrQuery query = new SolrQuery(); query.addTermsField("spell"); query.setTerms(true); query.setTermsLimit(limit); query.setTermsLower(q); query.setTermsPrefix(q); query.setQueryType("/terms"); try { QueryResponse qr = server.query(query); TermsResponse resp = qr.getTermsResponse(); items = resp.getTerms("spell"); } catch (SolrServerException e) { items = null; } return items; } 但是不知道是人品问题还是怎么的,我下载的solr1.4 SolrQuery类根本就没有这个addTermsField 和setTermsPrefix 方法, 这是我的下载地址http://mirror.nus.edu.sg/apache//lucene/solr/1.4.1/
solr实现autocomplete功能其实非常简单,仅仅需要下边的这个url就可以实现 fl=id,name&rows=0&q=*:*&facet=true&facet.field=name_auto&facet.mincount=1&facet.prefix=input 我们所要做的就是用solrj的api拼装成这个字符串请求tomcat就ok了 下面是拼装代码 CommonsHttpSolrServer service = new CommonsHttpSolrServer( "http://localhost:8080/solr/targetCore"); List<Term> list = new ArrayList<Term>(); QueryResponse queryResponse = new QueryResponse(); SolrQuery query = new SolrQuery(); // fl=id,name&rows=0&q=*:*&facet=true&facet.field=searchText&facet. // mincount=1&facet.prefix=sony //facet=true&rows=0&fl=id%2Cname&facet.prefix=sony&facet.field=searchText try { query.setFacet(true); query.setRows(0); query.setQuery("*:*"); query.setFacetPrefix("sony"); query.addFacetField("searchText"); System.out.println(query.toString()); queryResponse = service.query(query, METHOD.POST); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } 返回的内容如下
下边代码使用solrj的api解析文本的过程 CommonsHttpSolrServer service = new CommonsHttpSolrServer( "http://localhost:8080/solr/targetCore"); List<Term> list = new ArrayList<Term>(); QueryResponse queryResponse = new QueryResponse(); SolrQuery query = new SolrQuery(); // fl=id,name&rows=0&q=*:*&facet=true&facet.field=searchText&facet. // mincount=1&facet.prefix=sony //facet=true&rows=0&fl=id%2Cname&facet.prefix=sony&facet.field=searchText try { query.setFacet(true); query.setRows(0); query.setQuery("*:*"); query.setFacetPrefix("索尼"); query.addFacetField("searchText"); System.out.println(query.toString()); queryResponse = service.query(query, METHOD.POST); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } NamedList<Object> nl = queryResponse.getResponse(); NamedList<Object> nl2 = (NamedList<Object>) nl.get("facet_counts"); NamedList<Object> nl3 = (NamedList<Object>) nl2.get("facet_fields"); NamedList<Object> nl4 = (NamedList<Object>) nl3.get("searchText"); System.out.println(nl4.size()); Iterator<Entry<String, Object>> it = nl4.iterator(); while (it.hasNext()) { Entry<String, Object> entry = it.next(); System.out.println(entry.getKey() + "____" + entry.getValue()); } SolrDocumentList results = queryResponse.getResults(); SolrResult solrResult = new SolrResult(); 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2011-04-08
额 其实我想知道是怎么抓取页面的。
|
|
返回顶楼 | |
发表时间:2011-04-08
数据采集不是我负责的,但是我知道是用heritrix-1.14.3.zip这个东西搞得
|
|
返回顶楼 | |
发表时间:2011-11-08
你好,你那里还有前台代码
|
|
返回顶楼 | |
发表时间:2011-11-08
pengchhx 写道 你好,你那里还有前台代码
这东西跟前台代码没有什么关系 |
|
返回顶楼 | |