自动提示(二)词频统计(TermsComponent)

 需求:实现一种类似于京东的自动提示功能。

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());
					}
				}
			}

		}
	}

}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-29 16:27:12

自动提示(二)词频统计(TermsComponent)的相关文章

201671010416 焦少梅 实验二 词频统计项目

实验二 软件工程个人项目 实验目的与要求 掌握软件项目开发流程 掌握Github上发布软件项目的操作方法. 实验内容和步骤 任务1: 需求分析: 尝试按照<构建之法>第2章中2.3所述PSP流程,使用JAVA编程语言,独立完成一个英文文本词频统计的软件开发 程序可读入任意英文文本文件,该文件中英文词数大于等于1个. 程序需要很壮健,能读取容纳英文原版<哈利波特>10万词以上的文章. 指定单词词频统计功能:用户可输入从该文本中想要查找词频的一个或任意多个英文单词运行程序的统计功能可显

词频统计-功能二

一.完成一个小程序 今天的任务是处理一本英文小说.我处理的英文小说是<war and peace> 本想着用多线程来解决的,发现看书还不是太懂,并不能真正动手编程. 我在编程的过程中主要遇到了以下两个问题: 1.在对整个英文小说进行单词总数统计遇见困难. 2.字符串数组的空字符串处理问题.因为我开始用空格来代替标点等不是英文单词来进行对单词分割,其中用到了正则表达式,后来统计对单词出现频数时,发现空格竟然排第一名,有4万多空格. 最终我的处理方式是使用List泛型集合的ForEach方法循环获

微信二维码来源统计自动生成二维码统计?

微信二维码来源统计,我们先来了解下渠道二维码,我们的微信公众号使用渠道二维码可以实现记录粉丝是通过二维码扫描关注并进入活动功能的统计,渠道二维码还可以让粉丝扫码后直接关注成为粉丝并直接弹出微信活动的页面,真正实现关注加参与微信活动的快捷体验,然后就是注册微号帮平台,授权我们的认证服务号,才可以实现渠道二维码. 自动生成二维码统计操作.微信服务号如何授权微号帮平台?1.微信公众号授权微号帮平台(1)添加授权公众号 (2)微信扫码授权公众号使用微信公众平台绑定的管理员个人微信号扫描 (3)微信公众号

实验二-3 Hadoop&amp;Paoding 中文词频统计

  参考教程 在Hadoop上使用庖丁解牛(较复杂,并未采用,可以之后试试) http://zhaolinjnu.blog.sohu.com/264905210.html Lucene3.3.Lucene3.4中文分词——庖丁解牛分词实例(屈:注意版本) http://www.360doc.com/content/13/0217/13/11619026_266124504.shtml 庖丁分词在hadoop上运行时的配置问题(采纳了一半,没有按照其所写配置dic属性文件) http://f.da

Hadoop之词频统计小实验(基于单节点伪分布)

声明:1)本文由我bitpeach原创撰写,转载时请注明出处,侵权必究. 2)本小实验工作环境为Ubuntu操作系统,hadoop1-2-1,jdk1.8.0. 3)统计词频工作在单节点的伪分布上,至于真正实际集群的配置操作还没有达到,希望能够由本文抛砖引玉. (一)Hadoop的配置修正 网上有很多Hadoop的配置教程,可自行寻找,这一部分主要是根据自身实际情况,结合自身特点,设置Hadoop.因为有时候根据别人的教程,设置总是不成功,因为别人的教程依赖于别人的软件或操作环境特点. 本部分也

组合数据类型,英文词频统计 python

练习: 总结列表,元组,字典,集合的联系与区别.列表,元组,字典,集合的遍历. 区别: 一.列表:列表给大家的印象是索引,有了索引就是有序,想要存储有序的项目,用列表是再好不过的选择了.在python中的列表很好区分,遇到中括号(即[ ]),都是列表,定义列表也是如此.列表中的数据可以进行增删查改等操作: 增加有两种表达方式(append().expend()),关于append的用法如下(注:mylist定义的列表名称):不难看出,用append方法增加元素,不用给元素加中括号,而用exten

201671010421 麻存滔 词频统计软件项目报告

一.需求分析 1.程序可读入任意英文文本文件,该文件中英文词数大于等于1个,程序需要很壮健,能读取容纳英文原版<哈利波特>10万词以上的文章. 2.指定单词词频统计功能:用户可输入从该文本中想要查找词频的一个或任意多个英文单词,运行程序的统计功能可显示对应单词在文本中出现的次数和柱状图. 3.高频词统计功能:用户从键盘输入高频词输出的个数k,运行程序统计功能,可按文本中词频数降序显示前k个单词的词频及单词. 4.统计该文本所有单词数量及词频数,并能将单词及词频数按字典顺序输出到文件result

词频统计-功能一

一.完成一个小程序 我 拿到这个题目之后,就决定用最不熟悉的c#来实现,因为老师说不懂的去学才会有进步.布置任务后的第二天就开始去图书馆借了两本书<c#从入门到精髓>,<c#项目实战>,拿到书之后看了入门书<c#从入门到精髓>,看书的过程时痛苦的,因为发现大二选修课学的c#全交还给老师了,只能重头再学了.唯一有点印象的就是窗口应用程序,基于UI的设计. 写代码首先需要工具,由于电脑上没有visual studio的安装包,当时求助了度娘. 如果没有安装包的同学们,可以借

Myeclipse设置关键词自动提示功能以及取消空格和&quot;=&quot;的自动补全

一.设置Myeclipse从a~z的自动提示功能 1. “window”→“Preferences”2. 选择“Java”,展开,“Editor”,选择“Content Assist”.3. 选择“Content Assist”,然后看到右边,右边的“Auto-Activation”下面的“Auto Activation triggers for java”这个选项.其实就是指触发代码提示的就是“.”这个符号.4. “Auto Activation triggers for java”这个选项,