package zr.com.util;

import java.io.IOException;
import java.util.List;
import java.util.Map; import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrQuery.ORDER;
import org.apache.solr.client.solrj.SolrRequest;
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.Group;
import org.apache.solr.client.solrj.response.GroupCommand;
import org.apache.solr.client.solrj.response.GroupResponse;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.client.solrj.response.UpdateResponse;
import org.apache.solr.common.SolrDocument;
import org.apache.solr.common.SolrDocumentList;
import org.apache.solr.common.SolrInputDocument;
import org.apache.solr.common.util.NamedList;
import org.junit.Test; /**
*
* @author LF
*
*/
public class BaseOperation { /**
* 删除索引
* @throws IOException
* @throws SolrServerException
*/
@Test
public void deleteTest() throws SolrServerException, IOException{
// 建立请求
SolrServer server = new HttpSolrServer("http://192.168.10.105:18080");
// 删除
UpdateResponse ur = server.deleteById("448457__ef004ca974cc42b9a7128cb3a2eced3a");
System.out.println(ur);
// 提交
server.commit();
} /**
* 添加索引
* @throws IOException
* @throws SolrServerException
*/
@Test
public void addTest() throws SolrServerException, IOException{
// 建立请求
SolrServer server = new HttpSolrServer("http://192.168.10.105:18080");
// 创建SolrInputDocument对象
SolrInputDocument document = new SolrInputDocument();
// 添加相应的域(字段)
document.addField("id", "15201596724");
document.addField("courseName", "算法导论");
document.addField("schoolName", "计算机技术大学");
server.add(document);
// 提交
server.commit();
} /**
* 更新
* @throws IOException
* @throws SolrServerException
*/
@Test
public void updateTest() throws SolrServerException, IOException{
// 建立请求
SolrServer server = new HttpSolrServer("http://192.168.10.105:18080");
// 创建SolrInputDocument对象
SolrInputDocument document = new SolrInputDocument();
// 添加相应的域(如果id的值不存在,则添加;否则,会先删除原来的数据,再添加)
document.addField("id", "15201596724");
document.addField("courseName", "算法导论之算法之美");
document.addField("schoolName", "计算机技术大学");
document.addField("schoolShortName", "计算机技术软件工程学院");
server.add(document);
// 提交
server.commit();
} /**
* 查询
* @throws SolrServerException
*/
@Test
public void queryTest() throws SolrServerException{
// 建立请求
SolrServer server = new HttpSolrServer("http://192.168.10.105:18080");
// 创建查询对象
SolrQuery query = new SolrQuery();
// 查询语句的处理
// String queryStr = "id:15201596724";
// String queryStr = "courseName:算法导论";
// String queryStr = "courseName:算法导论之算法之美 AND schoolShortName:学院";
String queryStr = "courseName:算法导论之算法之美 OR schoolShortName:学院";
query.setQuery(queryStr); // 分页(起始位置)
query.setStart(10);
// 分页(每一页显示的条数)
query.setRows(5);
// 排序(降序)
query.setSort("courseName", ORDER.desc); //执行查询
QueryResponse response = server.query(query);
// 获取响应后的结果集
SolrDocumentList list = response.getResults();
for (SolrDocument solrDocument : list) {
System.out.println(solrDocument);
}
} /**
* 模糊查询(高亮)
* @throws SolrServerException
*/
@Test
public void dimQueryTest() throws SolrServerException{
// 建立请求
SolrServer server = new HttpSolrServer("http://192.168.10.105:18080");
// 创建查询对象
SolrQuery query = new SolrQuery();
// 查询语句的处理(模糊查询,添加双引号即可)
String queryStr = "courseName:\"算法导论\" "; // 设置高亮显示
// 是否设置高亮
query.setHighlight(true);
// 前缀
query.setHighlightSimplePre("<em>");
// 后缀
query.setHighlightSimplePost("</em>");
// 设置高亮文本的长度
query.setHighlightFragsize(8);
query.setHighlightRequireFieldMatch(true);
// 设置高亮的字段
query.addHighlightField("courseName"); query.setQuery(queryStr); // // 分页(起始位置)
// query.setStart(10);
// // 分页(每一页显示的条数)
// query.setRows(5);
// // 排序(降序)
// query.setSort("courseName", ORDER.desc); //执行查询
QueryResponse response = server.query(query);
// 获取高亮的信息
Map<String, Map<String, List<String>>> map = response.getHighlighting(); System.out.println(map); //执行查询
// QueryResponse response = server.query(query);
// 获取响应后的结果集
SolrDocumentList list = response.getResults();
for (SolrDocument solrDocument : list) {
// 获取ID
String id = solrDocument.getFieldValue("id").toString();
String courseName = solrDocument.getFieldValue("courseName").toString();
String schoolShortName = solrDocument.getFieldValue("schoolShortName").toString();
// 高亮替换
Map<String, List<String>> hlisMap = map.get(id);
if (hlisMap!=null) {
// System.out.println(hlisMap);
Object cName = hlisMap.get("courseName");
if (cName!=null) {
// 替换
courseName = cName.toString();
}
}
System.out.println("id:"+id+",courseName:"+courseName+",schoolShortName:"+schoolShortName);
}
} /**
* 分组查找
* @throws SolrServerException
*/
@Test
public void groupQuery() throws SolrServerException{
// 建立请求
SolrServer server = new HttpSolrServer("http://192.168.10.105:18080");
// 创建查询对象
SolrQuery query = new SolrQuery();
// 设置查询条件
query.setQuery("courseName:园林工程");
// 是否分组
query.setParam("group", true);
// 根据某个域进行分组
query.setParam("group.field", "areaName");
// 进行过滤(在某个区间内)
// query.setParam("group.query", "TimeScore:[0 TO 5]");
// 每组显示的个数
query.setParam("group.limit", "10");
// 是否计算所得分组的个数
query.setParam("group.ngroups", true); // query.setStart(5);
// query.setRows(100);
// 获取响应后的结果集
QueryResponse response = server.query(query);
// 获取分组后的结果集
GroupResponse gResponse = response.getGroupResponse(); List<GroupCommand> commands = gResponse.getValues();
if (commands != null) {
for (GroupCommand groupCommand : commands) {
System.out.println("总分组的个数:"+groupCommand.getNGroups().longValue());;
for (Group group : groupCommand.getValues()) {
SolrDocumentList list = group.getResult();
// System.out.println(list);
for (SolrDocument solrDocument : list) {
String id = solrDocument.get("id").toString();
String courseID = solrDocument.get("courseID").toString();
String schoolName = solrDocument.get("schoolName").toString();
String courseName = solrDocument.get("courseName").toString();
String areaName = solrDocument.get("areaName").toString();
System.out.println("areaName"+areaName+",id:"+id+",courseID:"+courseID+",schoolName:"+schoolName+",courseName"+courseName);
} }
}
}
} }

solr开发之基本操作的更多相关文章

  1. 在win10环境下搭建 solr 开发环境

    在win10环境下搭建 solr 开发环境 2017年05月30日 09:19:32 SegaChen0130 阅读数:1050   在win10环境下搭建 solr 开发环境 安装环境  Windo ...

  2. Cloudera5.8.3:Flume+Morphline+Solr开发小技巧

    1.Flume和Morphline添加日志打印 log4j.logger.org.apache.flume.sink.solr=DEBUG log4j.logger.org.kitesdk.morph ...

  3. Solr开发参考文档(转)

    Solr开发文档 Solr 是一种可供企业使用的.基于 Lucene 的搜索服务器,它支持层面搜索.命中醒目显示和多种输出格式.在这篇文章中,将介绍 Solr 并展示如何轻松地将其表现优异的全文本搜索 ...

  4. SQL数据开发(经典) 基本操作

    数据开发(经典) 1.按姓氏笔画排序: Select * From TableName Order By CustomerName Collate Chinese_PRC_Str oke_ci_as ...

  5. solr开发从查询结果集中获取对象数据

    solrJ从查询结果集中获取对象数据. 方案一:自定义转换方式 /** * * SolrDocument与实体类转换 [测试通过] * * @author pudongping * * @param ...

  6. solr开发,提交索引数据的几种方式

    今天抽空学习了一下solr,有新东西学习就是哈皮! 期待能有机会与实战.实例仅为个人理解学习实例.提交到Solr服务器上的数据必须是 SolrInputDocument 类型. 方案一:利用反射,自定 ...

  7. Python Qt的窗体开发的基本操作

    本文章采用的是Qt4,是python(x,y) 套件中集成的,为啥不集成Qt5呢,懒得装啊:) 正文: 首先看成品: 这个程序的功能是输入原价和降价的百分比,计算出最后的价格. 设计器部分 然后就是开 ...

  8. solr开发 小案例

    <?xml version="1.0" encoding="UTF-8"?> <web-app version="3.0" ...

  9. solr热身

    入博客园快满一年,居然没写一篇博客,好惭愧. 公司的搜索系统需要从Lucene.net(更新相当不给力)换成solr了,最近一直在学习solr,相关资料是相当的少啊,特别是还要在.net环境下开发.准 ...

随机推荐

  1. 拦截器springmvc防止表单重复提交【3】自己实际项目

    1:[定义注解] package com.jspxcms.ext.interceptor; import java.lang.annotation.ElementType; import java.l ...

  2. HBase错误大全

    1. stopping hbasecat: /tmp/hbase-root-master.pid: No such file or directory 原因:hadoop的pid文件丢失,hadoop ...

  3. initWithImage和imageWithContentsOfFile的区别

    UIImageView *imageView = [[UIImageView alloc] initWithImage:         [UIImage imageNamed:@"icon ...

  4. Visual Studio 常用快捷键(一)

    最近看到很多同事用 VI 来开发Ruby,Python脚本. 编辑代码全部用的是快捷键,效率很高. 其实Visual Stuido也有非常多的快捷键,熟练运用后,能大大提高工作效率. 本文介绍一些最常 ...

  5. Oracle Sql Developer 连接oracle

    PL/Sql 初次使用需要配置文件内容,对于我这种Oracle新手来说各种配置有点凌乱,所以果断选择Sql Developer. 选择它是因为初次使用的时候它不用想PL/Sql那样配置文件,而只需要添 ...

  6. 阿里云接口异常-Can not find endpoint to access

    最近在做公司的资产盘点,需要请求阿里云的接口获取公司的云服务器信息.在获取实例列表的过程中,通过异常机制捕获了 Can not find endpoint to access 这个错误.经过多次排查, ...

  7. RabbitMQ之Consumer消费模式(Push & Pull)

    版权声明:本文为博主原创文章,未经博主朱小厮允许不得转载. https://blog.csdn.net/u013256816/article/details/62890189概述消息中间件有很多种,进 ...

  8. checkStype和findBugs校验

    IDEA可以直接在setting中下载checkStyle和findBugs <plugin> <groupId>org.codehaus.mojo</groupId&g ...

  9. JUnit4学习

    参考:http://www.cnblogs.com/yangxia-test/p/3996120.html JUnit4是一个开源的java单元测试框架,我们只需要引入一个包,就可以使用它的功能 先说 ...

  10. 学习FPGA需要做哪些

    有些人比较差,做了一些介绍,有误导成分.有些人水平太高,介绍的很好,但是很多人依旧听不懂,得到的肯定很少.学习FPGA,在不同层次的人明显有不同的答案. 熟悉硬件描述语言语法,不需要什么都会,但是要记 ...