Solrj对SolrServer进行Term查询:(利用prefix 也可以实现auto-complete)
2012-08-17 16:24
411 查看
参考官方wiki:// 参考(refer to)http://wiki.apache.org/solr/TermsComponent
主要结果类:TermsResponse, TermsResponse.Term;
在solrconfig.xml中的相关设置:
<!-- Terms Component
http://wiki.apache.org/solr/TermsComponent
A component to return terms and document frequency of those terms
-->
<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>
</lst>
<arr name="components">
<str>terms</str>
</arr>
</requestHandler>
solrj进行查询Terms的代码:
测试结果:
去除前缀prefix 和正则的要求的结果:
主要结果类:TermsResponse, TermsResponse.Term;
在solrconfig.xml中的相关设置:
<!-- Terms Component
http://wiki.apache.org/solr/TermsComponent
A component to return terms and document frequency of those terms
-->
<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>
</lst>
<arr name="components">
<str>terms</str>
</arr>
</requestHandler>
solrj进行查询Terms的代码:
package cn.wzb; import java.util.List; import java.util.Map; import java.util.Set; import org.apache.solr.client.solrj.SolrQuery; import org.apache.solr.client.solrj.SolrServer; import org.apache.solr.client.solrj.SolrServerException; import org.apache.solr.client.solrj.impl.HttpSolrServer; import org.apache.solr.client.solrj.response.QueryResponse; import org.apache.solr.client.solrj.response.TermsResponse; public class TestTerms { /** * @param args */ public static void main(String[] args) { //实例化SolrServer,以获取与solrServer的通信 SolrServer solrServer = new HttpSolrServer("http://localhost:8983/solr"); //创建查询参数以及设定的查询参数 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", "introduction", "name", "text"); 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"); //查询并获取相应的结果! QueryResponse response = null; try { response = solrServer.query(params); } catch (SolrServerException e) { System.err.println(e.getMessage()); e.printStackTrace(); } catch (Exception e) { System.err.println(e.getMessage()); e.printStackTrace(); } finally { solrServer.shutdown(); } //获取相关的查询结果 if(response != null ){ System.out.println("查询耗时(ms):" + response.getQTime()); //System.out.println(response.toString()); 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(); System.out.println("Term : Frequency"); for(TermsResponse.Term term : termList) { System.out.println(term.getTerm() + " : " + term.getFrequency()); } System.out.println(); } System.out.println("\n\n\n"); //another way Set<String> fieldSet = termsMap.keySet(); for(String field : fieldSet) { System.out.println("Field Name : " + field); List<TermsResponse.Term> termList = termsResponse.getTerms(field); System.out.println("Term : Frequency"); for(TermsResponse.Term term : termList) { System.out.println(term.getTerm() + " : " + term.getFrequency()); } System.out.println(); } } } //关闭SolrServer连接实例,释放资源 solrServer.shutdown(); } }
测试结果:
2012-8-17 16:23:29 org.apache.solr.client.solrj.impl.HttpClientUtil createClient 信息: Creating new http client, config:maxConnections=128&maxConnectionsPerHost=32&followRedirects=false 查询耗时(ms):0 Field Name: text Term : Frequency 学习 : 4 学生 : 3 Field Name: name Term : Frequency Field Name: introduction Term : Frequency 学习 : 4 学生 : 3 Field Name : text Term : Frequency 学习 : 4 学生 : 3 Field Name : name Term : Frequency Field Name : introduction Term : Frequency 学习 : 4 学生 : 3
去除前缀prefix 和正则的要求的结果:
2012-8-17 16:30:44 org.apache.solr.client.solrj.impl.HttpClientUtil createClient 信息: Creating new http client, config:maxConnections=128&maxConnectionsPerHost=32&followRedirects=false 查询耗时(ms):0 Field Name: text Term : Frequency , : 5 人 : 5 他 : 5 学习 : 4 一个 : 3 好 : 3 学生 : 3 是 : 3 bbbfoo : 2 了 : 2 优秀 : 2 工作 : 2 开始 : 2 毕业 : 2 现在 : 2 aaabar : 1 aaafoo : 1 baraaa : 1 bazaaa : 1 bbbbar : 1 Field Name: name Term : Frequency 张三 : 1 李四 : 1 江八 : 1 沈六 : 1 王五 : 1 Field Name: introduction Term : Frequency , : 5 人 : 5 他 : 5 学习 : 4 一个 : 3 好 : 3 学生 : 3 是 : 3 bbbfoo : 2 了 : 2 优秀 : 2 工作 : 2 开始 : 2 毕业 : 2 现在 : 2 aaabar : 1 aaafoo : 1 baraaa : 1 bazaaa : 1 bbbbar : 1 Field Name : text Term : Frequency , : 5 人 : 5 他 : 5 学习 : 4 一个 : 3 好 : 3 学生 : 3 是 : 3 bbbfoo : 2 了 : 2 优秀 : 2 工作 : 2 开始 : 2 毕业 : 2 现在 : 2 aaabar : 1 aaafoo : 1 baraaa : 1 bazaaa : 1 bbbbar : 1 Field Name : name Term : Frequency 张三 : 1 李四 : 1 江八 : 1 沈六 : 1 王五 : 1 Field Name : introduction Term : Frequency , : 5 人 : 5 他 : 5 学习 : 4 一个 : 3 好 : 3 学生 : 3 是 : 3 bbbfoo : 2 了 : 2 优秀 : 2 工作 : 2 开始 : 2 毕业 : 2 现在 : 2 aaabar : 1 aaafoo : 1 baraaa : 1 bazaaa : 1 bbbbar : 1
相关文章推荐
- Solr高效利用:Solr实现SQL的查询与统计
- solr facet查询及solrj 读取facet数据【facet.prefix应用:搜索引擎拼写提示(也可用suggest);Solr 默认 requestHandler已包含 Facet 组件】
- MongoDB可以利用正则表达式进行模糊查询
- 利用autocomplete.js实现仿百度搜索效果(ajax动态获取后端[C#]数据)
- AJAX中利用AutoCompleteExtender实现类似于谷歌的智能提示(利用Access数据库)
- autocomplete+PHP+MYSQL的实现模糊查询
- Rails中应用auto_complete插件实现同步查询
- 利用solrj实现solr4.3.1的高亮实现
- Solr4:利用SolrJ创建索引,建立查询简单示范
- 关于oracle 11g自动分区+分区改名+定时任务综合使用实现自动分区后可以进行分区查询
- [ solr入门 ] - 利用solrJ进行检索
- 利用DataView.ToTable 方法 (String) 在结果中查询,可以实现无限次循环
- autocomplete+PHP+MYSQL的实现模糊查询
- AutoCompleteTextView 控件实现提示文本以及模糊查询
- AJAX中利用AutoCompleteExtender实现类似于谷歌的智能提示(利用SQL数据库)
- AutoCompleteTextView中的弹出框实现模糊查询
- autocomplete+PHP+MYSQL的实现模糊查询
- solrj实现solr的group查询:
- jquery Autocomplete 实现联想查询
- 利用回调技术实现的一个JDBC 查询操作(可依此进行扩展)