导入相关的jar包

<dependency>
<groupId>org.apache.solr</groupId>
<artifactId>solr-solrj</artifactId>
<version>4.10.2</version>
</dependency>
<!--日志的包, solrj执行需要一个日志包-->
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging-api</artifactId>
<version>1.1</version>
</dependency>

增删改的操作:

package com.zy.solr;

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.common.SolrInputDocument;
import org.junit.Test; import java.io.IOException;
import java.util.ArrayList;
import java.util.List; public class BaseSolr { //solrj写入一个索引
@Test
public void createIndexToSolr() throws IOException, SolrServerException {
//solrj的服务对象
SolrServer solrServer = new HttpSolrServer("http://localhost:8080/solr/collection1");
//添加document文档
SolrInputDocument document = new SolrInputDocument();
document.addField("id", 1);
document.addField("title", "solr是一个企业级的搜索应用服务器");
document.addField("content", "solr是一个独立的企业级搜索应用服务器, 用户可以通过http请求访问这个服务器, 获取或者写入对应的内容, 其底层是Lucene");
solrServer.add(document);
//提交
solrServer.commit();
} //solrj写入多个索引
@Test
public void createMultiIndexToSolr() throws IOException, SolrServerException {
//solrj的服务对象
SolrServer solrServer = new HttpSolrServer("http://localhost:8080/solr/collection1");
//添加document文档
List<SolrInputDocument> list = new ArrayList<SolrInputDocument>();
for (int i = 1; i < 6; i++) {
SolrInputDocument document = new SolrInputDocument();
document.addField("id", i);
document.addField("title", "solr是一个企业级的搜索应用服务器 " + i);
document.addField("content", "solr是一个独立的企业级搜索应用服务器, 用户可以通过http请求访问这个服务器, 获取或者写入对应的内容, 其底层是Lucene " + i);
list.add(document);
} solrServer.add(list);
//提交
solrServer.commit();
} //solrj写入一个索引(使用JavaBean方式)
@Test
public void createIndexJavaBeanToSolr() throws IOException, SolrServerException {
//solrj的服务对象
SolrServer solrServer = new HttpSolrServer("http://localhost:8080/solr/collection1");
//添加JavaBean信息
TestBean bean = new TestBean();
bean.setId("6");
bean.setName("solr");
bean.setTitle("solr title");
bean.setContent("solr content");
solrServer.addBean(bean);
//提交
solrServer.commit();
} //solrj写入多个索引(使用JavaBean方式)
@Test
public void createMultiIndexJavaBeanToSolr() throws IOException, SolrServerException {
//solrj的服务对象
SolrServer solrServer = new HttpSolrServer("http://localhost:8080/solr/collection1");
//添加JavaBean信息
List<TestBean> list = new ArrayList<TestBean>();
for (int i = 7; i < 10; i++) {
TestBean bean = new TestBean();
bean.setId(i + "");
bean.setName("solr " + i);
bean.setTitle("solr title " + i);
bean.setContent("solr content " + i);
list.add(bean);
}
solrServer.addBeans(list);
//提交
solrServer.commit();
} //solrj进行删除操作
@Test
public void deleteIndexToSolr() throws IOException, SolrServerException {
//solrj的服务对象
SolrServer solrServer = new HttpSolrServer("http://localhost:8080/solr/collection1");
//执行删除操作
//根据id删除
solrServer.deleteById("9");
//根据条件删除 条件基本格式: 字段的名称:字段的值
solrServer.deleteByQuery("content:solr content 8");
//提交
solrServer.commit();
}
}

查询操作:

    //基础查询 返回原生document
@Test
public void baseQuery() throws SolrServerException {
//创建solr的服务对象
SolrServer solrServer = new HttpSolrServer("http://localhost:8080/solr/collection1");
//执行查询操作
SolrQuery query = new SolrQuery("*:*");
QueryResponse response = solrServer.query(query);
SolrDocumentList documents = response.getResults();
for (SolrDocument document : documents) {
Object id = document.get("id");
Object name = document.get("name");
Object title = document.get("title");
Object content = document.get("content");
System.out.println(id + " " + name + " " + title + " " + content);
}
} //基础查询 返回JavaBean
@Test
public void javaBeanQuery() throws SolrServerException {
SolrServer solrServer = new HttpSolrServer("http://localhost:8080/solr/collection1");
SolrQuery query = new SolrQuery("*:*");
QueryResponse response = solrServer.query(query);
List<TestBean> list = response.getBeans(TestBean.class);
for (TestBean bean : list) {
System.out.println(bean);
}
} //复杂查询********************************************************* //公共方法
public void baseToSolr(SolrQuery solrQuery) throws SolrServerException {
//创建solr的服务对象
SolrServer solrServer = new HttpSolrServer("http://localhost:8080/solr/collection1");
//执行查询操作
QueryResponse response = solrServer.query(solrQuery);
//返回JavaBean list
List<TestBean> list = response.getBeans(TestBean.class);
for (TestBean bean : list) {
System.out.println(bean);
}
} // 在solr中, 如果要使用模糊查询 需要使用一个符号 ~
//~ 默认最大的编辑2次
//注意: 如果搜索条件中包含了特殊符号, 需要在条件的两边添加双引号或者单引号
@Test
public void fuzzQueryToSolr() throws SolrServerException {
SolrQuery solrQuery = new SolrQuery("content:'sol~'~"); baseToSolr(solrQuery);
} //通配符查询
//?代表一个字符 *代表多个字符
@Test
public void wildCardQueryToSolr() throws SolrServerException {
SolrQuery solrQuery = new SolrQuery("content:so*"); baseToSolr(solrQuery);
} //solr范围查询: 数值范围 日期范围 文本范围(采用字典顺序)
//使用格式: [ start TO end ] 包含边界值
//建议关键字都为大写(跟查询条件的内容进行区分)
//1 2 3 4 5 6 7 8 10 11 22 33
@Test
public void rangeQueryToSolr() throws SolrServerException {
SolrQuery solrQuery = new SolrQuery("id:[1 TO 3]"); baseToSolr(solrQuery);
} //布尔查询: lucene中: MUST NOT SHOULD
// solr: AND NOT OR
@Test
public void booleanQueryToSolr() throws SolrServerException {
SolrQuery solrQuery = new SolrQuery("content:企业级 NOT name:solr"); baseToSolr(solrQuery);
} // 子表达式查询
// 格式: (条件1 [OR AND NOT] 条件2) [OR AND NOT] (条件1 [OR AND NOT] 条件2)
@Test
public void biaoDaShiQueryToSolr() throws SolrServerException {
SolrQuery solrQuery = new SolrQuery("(content:lucene OR name:solr) AND id:[1 TO 2]"); baseToSolr(solrQuery);
}

其他高级操作:(排序,分页,高亮)

    //solr排序
@Test
public void sortQueryToSolr() throws SolrServerException {
SolrQuery solrQuery = new SolrQuery("*:*");
solrQuery.setSort(new SolrQuery.SortClause("id", "desc"));
// 参数1 默认排序的字段 参数2 排序的方式
solrQuery.setSort("id", SolrQuery.ORDER.desc);
baseToSolr(solrQuery);
} //solr分页
@Test
public void limitQueryToSolr() throws SolrServerException {
int page = 3; //当前页
int pageSize = 3; //每页显示的条数
SolrQuery solrQuery = new SolrQuery("*:*"); //设置从第几条开始 每页几条
solrQuery.setStart((page - 1) * pageSize);
solrQuery.setRows(pageSize); solrQuery.setSort(new SolrQuery.SortClause("id", "desc"));
// 参数1 默认排序的字段 参数2 排序的方式
solrQuery.setSort("id", SolrQuery.ORDER.desc);
baseToSolr(solrQuery);
} //solr高亮
@Test
public void highlighterQueryToSolr() throws SolrServerException {
//1. 创建solrj的服务对象
SolrServer solrServer = new HttpSolrServer("http://localhost:8080/solr/collection1"); //2. 执行查询
SolrQuery solrQuery = new SolrQuery("content:solr");
//高亮参数的设置
solrQuery.setHighlight(true);//开启高亮
solrQuery.addHighlightField("content");//设置高亮的字段,支持添加多个
solrQuery.addHighlightField("title");
solrQuery.setHighlightSimplePre("<font color='red'>"); //设置高亮标签的前缀
solrQuery.setHighlightSimplePost("</font>"); //设置高亮的后缀
//solrQuery.setHighlightSnippets(1); //进行分片高亮 默认为1, 主要针对多值的情况 QueryResponse response = solrServer.query(solrQuery); //获取高亮的内容:
Map<String, Map<String, List<String>>> map = response.getHighlighting();//获取高亮的结果集
/**
* 最外层的map:
* key: 文档的id值
*
* 内层的map
* key: 高亮的字段
* 内层中list:
* 存放的就是高亮的内容,默认集合中只有一个
*
*/
for (String docId : map.keySet()) {
//System.out.println(docId);
Map<String, List<String>> listMap = map.get(docId); for (String highlighterField : listMap.keySet()) {
//System.out.println(highlighterField);
List<String> list = listMap.get(highlighterField);//获取到高亮的内容
System.out.println("集合的长度:" + list.size());
System.out.println(highlighterField + " " + list.get(0));
}
}
}

solr的客户端操作:使用solrj进行curd操作的更多相关文章

  1. Solr JAVA客户端SolrJ 4.9使用示例教程

    http://my.oschina.net/cloudcoder/blog/305024 简介 SolrJ是操作Solr的JAVA客户端,它提供了增加.修改.删除.查询Solr索引的JAVA接口.So ...

  2. ASP.NET Cookie概念、CURD操作、原理、实际运用

    会话就WEB开发来说,一个会话就是你通过浏览器与服务器之间的一次通话,只不过这种通话是以用浏览器浏览的方式来实现的. 就会话的应用来说,一般会话是用来识别用户的,比如你可以使用会话级变量记录当前用户已 ...

  3. MongoDB学习笔记~自己封装的Curd操作(按需更新的先决条件)

    回到目录 我们上一讲中介绍了大叔封装的Mongo仓储,其中介绍了几个不错的curd操作,而对于按需更新内部子对象,它是有条件的,即你的子对象不能为null,也就是说,我们在建立主对象时,应该为子对象赋 ...

  4. Laravel框架数据库CURD操作、连贯操作使用方法

    Laravel框架数据库CURD操作.连贯如何来操作了这个操作性是非常的方便简单了我们在这里来为各位介绍一篇相关的教程,具体的细节步骤如下文介绍.   Laravel是一套简洁.优雅的PHP Web开 ...

  5. php对xml文件进行CURD操作

    XML是一种数据存储.交换.表达的标准: - 存储:优势在于半结构化,可以自定义schema,相比关系型二维表,不用遵循第一范式(可以有嵌套关系): - 交换:可以通过schema实现异构数据集成: ...

  6. MongoDB的安装及CURD操作

    MongoDB的下载地址:http://www.mongodb.org/downloads MongoDB有32bit和64bit两个版本,32bit只能存放2GB数据.我们选择64bit版进行下载. ...

  7. LINQ-to-SQL那点事~利用反射在LINQ-to-SQL环境中实现Ado.net的CURD操作

    回到目录 对于linq to sql提供的CURD操作,给我们的感觉就是简单,容易使用,更加面向对象,不用拼SQL语句了,这些好处都表示在处理单条实体或者集合长度小的情况下,如果有一个1000条的集合 ...

  8. Laravel框架数据库CURD操作、连贯操作

    这篇文章主要介绍了Laravel框架数据库CURD操作.连贯操作.链式操作总结,本文包含大量数据库操作常用方法,需要的朋友可以参考下 一.Selects 检索表中的所有行 $users = DB::t ...

  9. 一个简单的ORM制作(CURD操作类)

    SQL执行类 CURD操作类 其他酱油类 此篇是为上篇文章填坑的,不知道上篇砸过来的砖头够不够,不够的话请大家继续砸. CURD操作类负责将用户提供的条件转换为SQL语句,并提供给IHelper执行, ...

随机推荐

  1. 静态和全局变量的作用域zz

    全局变量和静态变量的存储方式是一样的,只是作用域不同.如果它们未初始化或初始化为0则会存储在BSS段,如果初始化为非0值则会存储在DATA段,见进程的地址空间分配一文. 静态变量的作用域是当前源文件, ...

  2. 配置 VS Code 调试 JavaScript

    原文:配置 VS Code 调试 JavaScript 1. 安装 Debugger for Chrome 扩展.Open in Browser  扩展.View In Browser 扩展 2.用v ...

  3. 一张elixir生产环境部署的图

  4. HL7 Tools suite

    HL7的官网有很多开源工具, 比如:RoseTree,V3Generator,RMIM Designer, Design Repository, V2 & V3 Mapping Tools等. ...

  5. Vue.js实现数据的双向数据流

    众所周知,Vue.js一直使用的是单向数据流的,和angularJs的双向数据流相比,单向数据流更加容易控制.Vue.js允许父组件通过props属性传递数据到子组件.但是有些情况下我们需要在子组件里 ...

  6. 安装MySQL-python 的问题

    安装MySQL-python 的问题 1.CentOS下载mysql-devel安装 yum install mysql-devel 2.Ubuntu下不叫mysql-devel,而是叫libmysq ...

  7. zookeeper实战:SingleWorker代码样例

    我们需要一个“单点worker”系统,此系统来确保系统中定时任务在分布式环境中,任意时刻只有一个实例处于活跃:比如,生产环境中,有6台机器支撑一个应用,但是一个应用中有30个定时任务,这些任务有些必须 ...

  8. 多进程并发简单socket

    server---------------------这种简单实现:坏处客户端启动一个一个进程,进程多了机器要蹦#!/usr/bin/env python # encoding: utf-8  # D ...

  9. 谷歌强制厂商升级KitKat 仍无法改善安卓碎片化

    据一份泄露的内部文档显示,谷歌计划推出新的Android版本及设备审批条例,限制硬件制造商推出Android 4.4 KitKat以下的旧版本硬件,来改变平台碎片化现象.如果厂商一意孤行,继续推出搭载 ...

  10. poj2356 Find a multiple

    /* POJ-2356 Find a multiple ----抽屉原理 Find a multiple Time Limit: 1000MS Memory Limit: 65536K Total S ...