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. LeetCode — (1)

    摘要: Nim Game.WordPattern.Move zeros.First Bad version.Ugly Number五个算法的python实现. 一个月多没更新,大概是因为状态一直不太好 ...

  2. Java [Leetcode 383]Ransom Note

    题目描述: Given
 an 
arbitrary
 ransom
 note
 string 
and 
another 
string 
containing 
letters from
 al ...

  3. 理解SQL【转http://blog.jobbole.com/55086/】

    很多程序员视 SQL 为洪水猛兽.SQL 是一种为数不多的声明性语言,它的运行方式完全不同于我们所熟知的命令行语言.面向对象的程序语言.甚至是函数语言(尽管有些人认为 SQL 语言也是一种函数式语言) ...

  4. Vue脚手架搭建过程

    1.使用npm全局安装vue-cli(前提是你已经安装了nodejs,否则你连npm都用不了),在cmd中输入一下命令 npm install --global vue-cli 安装完成后,创建自己的 ...

  5. 主窗体上按钮jig画图时,CAD得不到焦点的问题

    主窗体上按钮jig画图时,CAD得不到焦点的问题    按钮不要用 Click 事件,用 MouseDown 事件, 可完美解决该问题 1.试过CAD窗体获得焦点,不顶用 2.试用用命令行去执行,可行 ...

  6. 64位linux下rpm安装mysql的5.5.55版本

    昨天同事开了个阿里云环境,让我帮他安装mysql数据库,本想着很简单的一件事,结果还是折腾了一番.坑很多,一路趟过,一个接一个,只能硬着头皮冲. 首先是下载压缩包,因为采用了rpm安装方式,所以下载的 ...

  7. Timer的异常

    定时任务用Timer实现有可能出现异常,因为它是基于绝对时间而不是相对时间进行调度的.当环境的系统时间被修改后,原来的定时任务可能就不跑了.另外需要注意一点,捕获并处理定时任务的异常.如果在Timer ...

  8. 关于android api 23 +的权限问题

    Beginning in Android 6.0 (API level 23), users grant permissions to apps while the app is running, n ...

  9. 深入浅出MFC学习笔记 消息

    本章将会对MFC的消息映射和 命令传递机制做深入探讨. MFC规定了消息传递的路线,消息会按照这个路线传递下去,找不到归宿的话就交给DefWindowProc. 在产生窗口之前,如果我们在创建窗口时指 ...

  10. 全文检索引擎Solr系列——Solr核心概念、配置文件

    Document Document是Solr索引(动词,indexing)和搜索的最基本单元,它类似于关系数据库表中的一条记录,可以包含一个或多个字段(Field),每个字段包含一个name和文本值. ...