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. php str_pad();

    <?php $str = "Hello World"; echo str_pad($str,30,"."); ?> 运行实例 定义和用法 str_p ...

  2. PS基础教程[1]如何制作微信泡泡

    PS是很多朋友都很喜欢额一款图像处理软件,我们可以使用PS制作很多的效果,本系列经验教程的起源就来源于知道中这位朋友问的微信泡泡如何使用,下面就来简单的分享一下. 微信泡泡制作方法 有很多的方法可以制 ...

  3. WPF XMAL获取元素的父元素,子元素

    /// 获得指定元素的父元素 /// </summary> /// <typeparam name="T">指定页面元素</typeparam> ...

  4. 剑指offer-第五章优化时间和空间效率(最小的k个数)

    题目:输入n个数,输出最小的k个数. 时间复杂度为O(n) 思路1:我们想的到的最直接的思路就是对这个N个数进行排序,然后就可以找到最小的k个了,同样可以用快排partition.但是只要找到前K个最 ...

  5. spring mvc从@ResponseBody取到json发现中文乱码

    问题背景:如题. 问题定位:代码跟踪,从源头入手,一步一步跟进,直到设置中文编码的地方. 问题代码: /** * 获取单个测试桩接口内容 * * @author wulinfeng * @param ...

  6. UE4事件相关总结

    转自:http://blog.ch-wind.com/ue4-event-overview/ 事件机制是实现游戏内逻辑的重要部分,在开始进行游戏逻辑的设计和实现之前,对UE4的事件机制进行理解是非常必 ...

  7. java成神之——网络编程基本操作

    网络编程 获取ip UDP程序示例 TCP程序 结语 网络编程 获取ip InetAddress id = InetAddress.getLocalHost(); // InetAddress id ...

  8. python ftp 上传

    #!/usr/bin/python # -*-coding:utf- -*- from ftplib import FTP def ftpconnect(host,username,password) ...

  9. 关于Pycharm中如何注释

    主要有三种方法: ①在程序行前面加“#” ②将需要注释的代码用'''----''' 包起来,此方法类似C的注释方法 ③将需要注释的代码选住然后利用“Ctrl+/”进行注释 # test=input(' ...

  10. HTTP常用标准请求头字段

    常用标准请求头字段 Accept 设置接受的内容类型 Accept: text/plain Accept-Charset 设置接受的字符编码 Accept-Charset: utf-8 Accept- ...