solrJ的使用--覆盖创建索引,查询,删除索引【转自http://blog.sina.com.cn/s/blog_64ac3ab10100t3mq.html】
- package com.xzhe.common.search;
- import java.util.ArrayList;
- import java.util.Collection;
- import java.util.List;
- import java.util.Map;
- import org.apache.solr.client.solrj.SolrQuery;
- import org.apache.solr.client.solrj.impl.CommonsHttpSolrServer;
- import org.apache.solr.client.solrj.response.FacetField;
- import org.apache.solr.client.solrj.response.FacetField.Count;
- import org.apache.solr.client.solrj.response.QueryResponse;
- import org.apache.solr.common.SolrDocumentList;
- import org.apache.solr.common.SolrInputDocument;
- import com.xzhe.goods.bo.Goods;
- import com.xzhe.goods.dao.impl.GoodsDAO;
- public class SolrSearch {
- private static String tomcat_solr = "http://localhost:8983/solr";
- private static CommonsHttpSolrServer solr = null;
- private static GoodsDAO goodsDAO = GoodsDAO.getInstance();
- private static List<Goods> goodList = new ArrayList<Goods>();
- // 初始化solr服务
- public static void initiate() {
- try {
- solr = new CommonsHttpSolrServer(tomcat_solr);
- solr.setConnectionTimeout(100);
- solr.setDefaultMaxConnectionsPerHost(100);
- solr.setMaxTotalConnections(100);
- } catch (Exception e) {
- System.out.println("请检查tomcat服务器或端口是否开启!");
- e.printStackTrace();
- }
- }
- // 检测good是否有字段为空
- public static Boolean CheckGood(Goods good) {
- if (null == good.getTitle() || good.getTitle().length() == 0) {
- return false;
- } else if (null == good.getGoodsId()) {
- return false;
- } else if (null == good.getStartTime()) {
- return false;
- } else if (null == good.getDiscount()) {
- return false;
- } else if (null == good.getCurPrice()) {
- return false;
- } else if (null == good.getSiteId()) {
- return false;
- } else if (null == good.getBuyNum()) {
- return false;
- } else {
- return true;
- }
- }
- // 将数据库中的时间转换为solr可接受的格式
- public static String Convertime(String time) {
- time = time.replace(" ", "T");
- time = time + "00Z";
- return time;
- }
- // 添加list到索引,flag为false,在原有基础上添加,为false,重新添加、原有索引不会被删除
- public static void addGoods(List<Goods> list, Boolean flag) {
- if (flag) {
- try {
- solr.deleteByQuery("*:*");
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- Collection<SolrInputDocument> docs = new ArrayList<SolrInputDocument>();
- for (int i = 0; i < list.size(); i++) {
- Goods good = list.get(i);
- if (CheckGood(good)) {
- SolrInputDocument doc = new SolrInputDocument();
- doc.addField("goodid", good.getGoodsId());
- doc.addField("title", good.getTitle());
- doc.addField("siteid", good.getSiteId());
- doc.addField("buynum", good.getBuyNum());
- doc.addField("starttime", Convertime(good.getStartTime()
- .toString()));
- doc.addField("discount", good.getDiscount());
- doc.addField("curprice", good.getCurPrice());
- docs.add(doc);
- }
- }
- try {
- solr.add(docs);
- solr.optimize();
- solr.commit();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- // 转换good到beans
- public static GoodsBeans ConvertGoodstoBeans(Goods good) {
- if (!CheckGood(good)) {
- return null;
- }
- GoodsBeans beans = new GoodsBeans(good.getGoodsId().toString(),
- good.getTitle(), good.getSiteId().toString(), good.getBuyNum(),
- good.getStartTime(), good.getDiscount(), good.getCurPrice());
- return beans;
- }
- // 添加beans到索引
- public static void addGoodsBeans(List<GoodsBeans> beansList) {
- try {
- solr.addBeans(beansList);
- } catch (Exception e) {
- e.printStackTrace();
- } finally {
- try {
- solr.optimize();
- solr.commit();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
- // 删除所有索引
- public static void DeleteAllIndex() {
- try {
- solr.deleteByQuery("*:*");
- solr.commit();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- // 根据ID删除索引
- public static void DeleteIndex(List<String> ids) {
- try {
- solr.deleteById(ids);
- solr.commit();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- // 进行搜索,field、key为查询(值或范围均可),start为起始查询位置,row为返回结果个数,sortfield为排序字段,flag中true升序、false降序,hightlight选择是否高亮返回,高亮字段为title
- public static QueryResponse Search(String[] field, String[] key, int start,
- int count, String[] sortfield, Boolean[] flag, Boolean hightlight) {
- if (null == field || null == key || field.length != key.length) {
- return null;
- }
- if (null == sortfield || null == flag
- || sortfield.length != flag.length) {
- return null;
- }
- SolrQuery query = null;
- try {
- if (field[0].equals("title")) {
- // query = new SolrQuery("*" + key + "*");
- query = new SolrQuery(field[0] + ":" + key[0]);
- } else {
- query = new SolrQuery(field[0] + ":" + key[0]);
- }
- for (int i = 0; i < field.length; i++) {
- if (field[i].equals("title")) {
- // query = new SolrQuery("*" + key + "*");
- query.addFilterQuery(field[i] + ":" + key[i]);
- } else {
- query.addFilterQuery(field[i] + ":" + key[i]);
- }
- }
- query.setStart(start);
- query.setRows(count);
- for (int i = 0; i < sortfield.length; i++) {
- if (flag[i]) {
- query.addSortField(sortfield[i], SolrQuery.ORDER.asc);
- } else {
- query.addSortField(sortfield[i], SolrQuery.ORDER.desc);
- }
- }
- if (null != hightlight) {
- query.setHighlight(true); // 开启高亮组件
- query.addHighlightField("title");// 高亮字段
- query.setHighlightSimplePre("<font color=\"red\">");// 标记
- query.setHighlightSimplePost("</font>");
- query.setHighlightSnippets(1);
- query.setHighlightFragsize(1000);
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- System.out.println(query.toString());
- QueryResponse rsp = null;
- try {
- rsp = solr.query(query);
- } catch (Exception e) {
- e.printStackTrace();
- return null;
- }
- return rsp;
- }
- // 自动补全
- public static String[] autoComplete(String prefix, int min) {
- String words[] = null;
- StringBuffer sb = new StringBuffer("");
- SolrQuery query = new SolrQuery("*.*");
- QueryResponse rsp = new QueryResponse();
- try {
- query.setFacet(true);
- query.setQuery("*:*");
- query.setFacetPrefix(prefix);
- query.addFacetField("title");
- rsp = solr.query(query);
- } catch (Exception e) {
- // TODO: handle exception
- e.printStackTrace();
- return null;
- }
- if (null != rsp) {
- FacetField ff = rsp.getFacetField("title");
- List<Count> countList = ff.getValues();
- if (null == countList) {
- return null;
- }
- for (int i = 0; i < countList.size(); i++) {
- String tmp[] = countList.get(i).toString().split(" ");
- if (tmp[0].length() < 2) {
- continue;
- }
- sb.append(tmp[0] + " ");
- min--;
- if (min == 0) {
- break;
- }
- }
- words = sb.toString().split(" ");
- } else {
- return null;
- }
- return words;
- }
- public static void main(String[] args) {
- initiate();
- // 建立索引
- // goodList = goodsDAO.findAll();
- // System.out.println("所有商品载入完成!");
- // DeleteAllIndex();
- // System.out.println("原有索引已清除!");
- // System.out.println("添加索引开始!");
- // long starttime = System.currentTimeMillis();
- // addGoods(goodList, true);
- // long endtime = System.currentTimeMillis();
- // System.out.println("共耗时" + (endtime - starttime) + "ms!");
- // System.out.println("添加索引完成!");
- // 进行查询
- SolrDocumentList solrList = null;
- QueryResponse rsp = null;
- // rsp = Search("title", "*变形金* 蓝精灵", 0, 10, "buynum", false, true);
- // String field[] = { "title", "buynum", "discount", "starttime" };
- // String key[] = { "变形金刚 哈利波特", "[90 TO 100]", "[2.0 TO 3.0]",
- // "[2011-07-18T00:00:00.000Z TO 2011-07-19T00:00:00.000Z]" };
- String field[] = {"title"};
- String key[] = {"牛奶"};
- String sortfield[] = { "buynum" };
- Boolean flag[] = { false };
- long starttime = System.currentTimeMillis();
- rsp = Search(field, key, 0, 10, sortfield, flag, true);
- long endtime = System.currentTimeMillis();
- System.out.println("共耗时" + (endtime - starttime) + "ms!");
- if (null != rsp) {
- solrList = rsp.getResults();
- for (int i = 0; i < solrList.size(); i++) {
- System.out.println(solrList.get(i).toString());
- }
- // 高亮显示部分
- System.out.println("搜索结果共" + solrList.size() + "条!");
- System.out.println("");
- Map<String, Map<String, List<String>>> hightlight = rsp
- .getHighlighting();
- List<GoodsBeans> tmpLists = rsp.getBeans(GoodsBeans.class);
- for (int i = 0; i < tmpLists.size(); i++) {
- String hlString = hightlight.get(tmpLists.get(i).getGoodId())
- .get("title").toString();
- if (null != hlString) {
- // System.out.println(hlString);
- }
- }
- }
- // 自动补全
- // String words[] = autoComplete("哈利", 10);
- // if (null != words) {
- // System.out.println(words.length);
- // for (int i = 0; i < words.length; i++) {
- // System.out.println(words[i]);
- // }
- // }
- }
- }
solrJ的使用--覆盖创建索引,查询,删除索引【转自http://blog.sina.com.cn/s/blog_64ac3ab10100t3mq.html】的更多相关文章
- MongoDB性能篇之创建索引,组合索引,唯一索引,删除索引和explain执行计划
这篇文章主要介绍了MongoDB性能篇之创建索引,组合索引,唯一索引,删除索引和explain执行计划的相关资料,需要的朋友可以参考下 一.索引 MongoDB 提供了多样性的索引支持,索引信息被保存 ...
- SQL优化 MySQL版 - 索引分类、创建方式、删除索引、查看索引、SQL性能问题
SQL优化 MySQL版 - 索引分类.创建方式.删除索引.查看索引.SQL性能问题 作者 Stanley 罗昊 [转载请注明出处和署名,谢谢!] 索引分类 单值索引 单的意思就是单列的值,比如说有 ...
- mysql 创建索引和删除索引
索引的创建可以在CREATE TABLE语句中进行,也可以单独用CREATE INDEX或ALTER TABLE来给表增加索引.删除索引可以利用ALTER TABLE或DROP INDEX语句来实现. ...
- mysql索引 ->创建索引、修改索引、删除索引的命令语句
查看表中已经存在 index:show index from table_name; 创建和删除索引索引的创建可以在CREATE TABLE语句中进行,也可以单独用CREATE INDEX或ALTER ...
- mysql——创建索引、修改索引、删除索引的命令语句
查看表中已经存在 index:show index from table_name; 创建和删除索引索引的创建可以在CREATE TABLE语句中进行,也可以单独用CREATE INDEX或ALTER ...
- INDEX--创建索引和删除索引时的SCH_M锁
最近有一个困惑,生产服务器上有一表索引建得乱七八糟,经过整理后需要新建几个索引,再删除几个索引,建立索引时使用联机(ONLINE=ON)创建,查看下服务器负载(磁盘和CPU压力均比较低的情况)后就选择 ...
- mysql索引学习----2----创建索引、修改索引、删除索引的命令语句
查看表中已经存在 index:show index from table_name; 创建和删除索引索引的创建可以在CREATE TABLE语句中进行,也可以单独用CREATE INDEX或ALTER ...
- Oracle如何创建索引、删除索引、查询索引
1.创建单一索引 create index 索引名称 on 表名(列名); 2.创建复合索引 create index 索引名称 on 表名(列名1,列名2); 3.删除索引 drop index 索 ...
- SQL创建索引和删除索引
使用CREATE 语句创建索引 CREATE INDEX index_name ON table_name(column_name,column_name) include(score) 普通索引 C ...
随机推荐
- HBase协处理器同步二级索引到Solr
一. 背景二. 什么是HBase的协处理器三. HBase协处理器同步数据到Solr四. 添加协处理器五. 测试六. 协处理器动态加载 一. 背景 在实际生产中,HBase往往不能满足多维度分析,我们 ...
- Multitier architecture
Multitier architecture - Wikipedia https://en.wikipedia.org/wiki/Multitier_architecture Common layer ...
- NameNode和JobTracker的网络接口
Hadoop快速入门 http://hadoop.apache.org/docs/r1.0.4/cn/quickstart.html
- MySQL安装、安装时未提示输入密码、如何修改密码小结
http://blog.csdn.net/fr555wlj/article/details/54971412
- Servlet session的理解
servlet参见http://blog.csdn.net/bryanliu1982/article/details/5214899 session参见http://lavasoft.blog.51c ...
- 通过powershell操作eventlog
relevant command list ~\Desktop> (Get-Command Write-EventLog).Parameters Key Value --- ----- Warn ...
- HDU 2036:改革春风吹满地
改革春风吹满地 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Su ...
- html5--6-5 CSS选择器2
html5--6-5 CSS选择器2 实例 学习要点 掌握常用的CSS选择器 了解不太常用的CSS选择器 什么是选择器 当我们定义一条样式时候,这条样式会作用于网页当中的某些元素,所谓选择器就是样式作 ...
- codeforces 414A A. Mashmokh and Numbers(素数筛)
题目链接: A. Mashmokh and Numbers time limit per test 1 second memory limit per test 256 megabytes input ...
- object_funs.py
#__init__ 构造方法,双下划线 #__del__ 析构方法,在对象就要被垃圾回收前调用.但发生调用 #的具体时间是不可知的.所以建议尽量避免使用__del__ print('-------ex ...