智能提示(二)solr词频统计(TermsComponent)
2015-07-28 18:18
357 查看
需求:实现一种类似于京东的自动提示功能。
1:用solr 的suggest组件。
2:用TermsComponent
在传统数据库中,有一种模糊查询。。类似于 keyword like "京东%" ,然后统计数量,返回给前端。。但,这样有一个问题。如果该字段非词性的。精确性和效率性不高。
solr中TermsComponent组件完美的解决了这么一个方案,能够统计指定搜索域中 所有词的 信息。类似于lucene Term查询。
刚研究了会solrj的TermsComponent :http://wiki.apache.org/solr/TermsComponent
solrconfig配置如下:
返回结果:默认按词的count出现次数倒序排序。
solrj代码:
1:用solr 的suggest组件。
2:用TermsComponent
在传统数据库中,有一种模糊查询。。类似于 keyword like "京东%" ,然后统计数量,返回给前端。。但,这样有一个问题。如果该字段非词性的。精确性和效率性不高。
solr中TermsComponent组件完美的解决了这么一个方案,能够统计指定搜索域中 所有词的 信息。类似于lucene Term查询。
刚研究了会solrj的TermsComponent :http://wiki.apache.org/solr/TermsComponent
solrconfig配置如下:
<searchComponent name="terms" class="solr.TermsComponent"/> <!-- A request handler for demonstrating the terms component --> <requestHandler name="/terms" class="solr.SearchHandler" startup="lazy"> <lst name="defaults"> <bool name="terms">true</bool> <bool name="distrib">false</bool> </lst> <arr name="components"> <str>terms</str> </arr> </requestHandler>
返回结果:默认按词的count出现次数倒序排序。
solrj代码:
package com.lubanec.action; import java.util.List; import java.util.Map; import org.apache.solr.client.solrj.SolrQuery; import org.apache.solr.client.solrj.SolrServer; import org.apache.solr.client.solrj.response.QueryResponse; import org.apache.solr.client.solrj.response.TermsResponse; import com.lubanec.index.service.Indexer; public class Test { public static void main(String[] args) throws Exception { // 实例化solrserver,以获取与solrserver的通信 SolrServer solrserver = Indexer.getHttpSolrServer("goods"); // 创建查询参数以及设定的查询参数 SolrQuery params = new SolrQuery(); params.set("q", "*:*"); params.set("qt", "/terms"); // parameters settings for terms requesthandler // 参考(refer to)http://wiki.apache.org/solr/termscomponent params.set("terms", "true"); params.set("terms.fl", "goods"); //指定下限 // params.set("terms.lower", ""); // term lower bounder开始的字符 // params.set("terms.lower.incl", "true"); // params.set("terms.mincount", "1"); // params.set("terms.maxcount", "100"); // http://localhost:8983/solr/terms?terms.fl=text&terms.prefix=学 // // using for auto-completing //自动完成 // params.set("terms.prefix", "联"); params.set("terms.regex", "学+.*"); params.set("terms.regex.flag", "case_insensitive"); // // params.set("terms.limit", "20"); // params.set("terms.upper", ""); //结束的字符 // params.set("terms.upper.incl", "false"); // // params.set("terms.raw", "true"); params.set("terms.sort", "count");//terms.sort={count|index} -如果count,各种各样的条款术语的频率(最高计数第一)。 如果index,索引顺序返回条款。默认是count // 查询并获取相应的结果! QueryResponse response = solrserver.query(params); // 获取相关的查询结果 if (response != null) { TermsResponse termsResponse = response.getTermsResponse(); if (termsResponse != null) { Map<String, List<TermsResponse.Term>> termsMap = termsResponse.getTermMap(); for (Map.Entry<String, List<TermsResponse.Term>> termsEntry : termsMap.entrySet()) { // System.out.println("Field Name: " + termsEntry.getKey()); List<TermsResponse.Term> termList = termsEntry.getValue(); for (TermsResponse.Term term : termList) { System.out.println(term.getTerm() + " : "+ term.getFrequency()); } } } } } }
相关文章推荐
- vector的初始化和遍历
- 套接字通信
- Spark部署与开发环境搭建jjar运行
- Python 学习笔记13:Python + wsgi + django 配置。坑爹的python3和wsgi不兼容的解决
- 【转】linux命令useradd添加用户详解
- css和js实现弹出登录居中界面
- 字符串过长CSS截取多余文字并用省略号显示
- sql 获取本周、本月数据
- SQL Server游标的使用【转】(超详细)
- ST推出新软件STM32Cube ,让STM32微控制器应用设计变得更容易、更快、更好用
- HDU5320 : Fan Li
- easyui form表单提交中文乱码
- windows下面hook系统api实现禁止任务管理器关闭程序
- shell的if嵌套
- HDU 5326 公司人员管理树问题(多校)-简单dp
- shell的if嵌套
- MongoDB
- leetcode刷题 总结 记录 备忘 46
- 网络协议学习之局域网监听技术
- JavaScript DOM编程艺术