转:

使用solrJ操作solr常用方法

2017年08月07日 22:49:06 成都往右 阅读数:8990
 
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_37334135/article/details/76862508

既然学的是java那么肯定需要用java代码来进行对solr的操作,如果知道在solr后台管理界面进行增删改查等操作,那么用solrJ操作solr会更好理解。

solrJ介绍
solrJ是一个用来访问solr的java客户端,提供了索引和搜索的方法(将一些常用的命令封装进去了),通过solrJ提供的API 接口来操作solr服务。

准备工作
创建个maven工程(普通的java工程都可以不过需要自己导包),添加依赖如下:

<dependencies>
<dependency>
<groupId>org.apache.solr</groupId>
<artifactId>solr-solrj</artifactId>
<version>4.10.2</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
</dependencies>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

注:有的大神介绍说添加第一个solrj的依赖就行,但是我这里测试的时候发现还是需要commons-logging的依赖的,另外,如果你本地仓库没有zookeeper-3.4.6.jar跟slf4j-api-1.7.6.jar也会直接报错,自己去网上下一个吧,最终包结构我也截了个图。

然后启动solr服务器,接下来进行操作。
1、添加文档

    /*
* 测试向索引库中添加文档
*/
@Test
public void testSave() throws Exception{
//1.创建连接对象
SolrServer solrServer = new HttpSolrServer("http://192.168.25.128:8080/solr/collection1");
//2.创建一个文档对象
SolrInputDocument inputDocument = new SolrInputDocument();
//向文档中添加域以及对应的值,注意:所有的域必须在schema.xml中定义过,前面已经给出过我定义的域。
inputDocument.addField("id", "1");
inputDocument.addField("item_title", "sansung爆炸牌手机");
inputDocument.addField("item_price", 666);
inputDocument.addField("item_image", "www.boom.png");
//3.将文档写入索引库中
solrServer.add(inputDocument);
//提交
solrServer.commit();
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

后台管理界面查询id为1的商品看看

2、修改文档

    /*
* 测试修改索引库中已存在的文档
*/
@Test
public void testUpdate() throws Exception{
//1.创建连接对象
SolrServer solrServer = new HttpSolrServer("http://192.168.25.128:8080/solr/collection1");
//2.创建一个文档对象
SolrInputDocument inputDocument = new SolrInputDocument();
inputDocument.addField("id", "1");
//修改id为1的商品的信息(如果该商品不存在其实就是添加了)
inputDocument.addField("item_title", "vivo手机hahaha");
inputDocument.addField("item_price", 6666);
inputDocument.addField("item_image", "www.123.png");
//3.将文档写入索引库中
solrServer.add(inputDocument);
//提交
solrServer.commit();
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

再去后台管理页面查询id为1的商品看看

3、删除文档

    /*
* 测试删除文档:根据id删除文档 *
*/
@Test
public void testDeleteById() throws Exception{
SolrServer solrServer = new HttpSolrServer("http://192.168.25.128:8080/solr/collection1");
//删除文档
solrServer.deleteById("1");
//提交
solrServer.commit();
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
    /*
* 测试删除文档:根据查询结果删除文档(重新添加id为1的文档)
*/
@Test
public void testDeleteByQ() throws Exception{
SolrServer solrServer = new HttpSolrServer("http://192.168.25.128:8080/solr/collection1");
//根据查询结果删除文档,注意:用item_image的查询结果来进行删除是不行的
//因为制定业务域的时候indexed=false,即不被索引,此时是不能根据图片来查询的。
solrServer.deleteByQuery("item_title:vivo手机hahaha");
solrServer.commit();
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

不管是根据id删除还是根据查询删除都能达到一样的效果。
4、查询索引

1、简单根据id查询索引

    /*
* 简单查询:查询单个商品信息
*/
@Test
public void testSimpleQ() throws Exception{
//1.创建连接
SolrServer solrServer = new HttpSolrServer("http://192.168.25.128:8080/solr/collection1");
//2.创建查询语句
SolrQuery query = new SolrQuery();
//3.设置查询条件
query.set("q", "id:1");
//4.执行查询
QueryResponse queryResponse = solrServer.query(query);
//5.取文档列表public class SolrDocumentList extends ArrayList<SolrDocument>
SolrDocumentList documentList = queryResponse.getResults();
for (SolrDocument solrDocument : documentList) {
//取各个文档信息
System.out.println("商品id:"+solrDocument.get("id")+" ");
System.out.println("商品标题:"+solrDocument.get("item_title")+" ");
System.out.println("商品价格:"+solrDocument.get("item_price")+" ");
System.out.println("商品图片:"+solrDocument.get("item_image")+" ");
}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
输出结果:
商品id:1
商品标题:vivo手机hahaha
商品价格:6666
商品图片:www.123.png
  • 1
  • 2
  • 3
  • 4
  • 5

2、设置条件进行查询

@Test
public void testSimpleQ2 () throws Exception{
//1.创建连接
SolrServer solrServer = new HttpSolrServer("http://192.168.25.128:8080/solr/collection1");
//2.创建查询语句
SolrQuery query = new SolrQuery();
//3.设置查询条件
query.set("q", "夏普");//设置查询关键字
query.setSort("id", ORDER.desc);//按照id降序排列
query.setStart(1);
query.setRows(3);//分页条件
query.set("df", "item_title");//默认在商品标题域进行查询
//4、执行查询
QueryResponse queryResponse = solrServer.query(query);
//5.获取文档列表
SolrDocumentList documentList = queryResponse.getResults();
//获取总记录数
long numFound = documentList.getNumFound();
System.out.println("总记录数:" + numFound);
for (SolrDocument solrDocument : documentList) {
//取各个文档信息
System.out.print("商品id:"+solrDocument.get("id")+" ");
System.out.print("商品标题:"+solrDocument.get("item_title")+" ");
System.out.print("商品价格:"+solrDocument.get("item_price")+" ");
System.out.println();
}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

注:如果设置了默认查询域的话,自己又不想在这个域内查那么在查询关键字前要注明要在哪个域查,比如:”item_price:600”

输出结果:
总记录数:19
商品id:936920 商品标题:夏普(SHARP)LCD-52DS70A 52英寸 日本原装液晶面板 3D Android操作系统智能液晶电视 商品价格:699900
商品id:816753 商品标题:夏普(SHARP)LCD-46DS40A 46英寸 日本原装液晶面板 智能全高清液晶电视 商品价格:379900
商品id:1356054 商品标题:夏普(SHARP)LCD-50DS72A 50英寸 无线网络 安卓智能 4K超高清液晶电视 商品价格:549900
  • 1
  • 2
  • 3
  • 4
  • 5

3、带高亮的复杂查询

    /*
* 测试复杂查询:取高亮
*/
@Test
public void testHighLighting() throws Exception{
//1、创建连接
SolrServer solrServer = new HttpSolrServer("http://192.168.25.128:8080/solr/collection1");
//2、创建查询语句
SolrQuery query = new SolrQuery();
//3、设置查询条件
query.set("q", "夏普");//设置查询关键字
query.setSort("id", ORDER.desc);//按照id降序排列
query.setStart(1);
query.setRows(5);//分页条件
query.set("df", "item_title"); //开启高亮显示
query.setHighlight(true);
query.setHighlightSimplePre("<em>");
query.setHighlightSimplePost("</em>"); //4、执行查询
QueryResponse queryResponse = solrServer.query(query);
//5、取高亮
Map<String, Map<String, List<String>>> highlighting = queryResponse.getHighlighting();
//6、获取文档列表
SolrDocumentList documentList = queryResponse.getResults();
//7、遍历查询结果
for (SolrDocument solrDocument : documentList) {
System.out.print(solrDocument.get("id")+" ");
List<String> titleList = highlighting.get(solrDocument.get("id")).get("item_title");
if (titleList !=null && titleList.size()>0) {
//能取到高亮,输出高亮
System.out.print(titleList.get(0));
}
System.out.println();
} }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
输出结果:
936920 <em>夏普</em>(SHARP)LCD-52DS70A 52英寸 日本原装液晶面板 3D Android操作系统智能液晶电视
816753 <em>夏普</em>(SHARP)LCD-46DS40A 46英寸 日本原装液晶面板 智能全高清液晶电视
1356054 <em>夏普</em>(SHARP)LCD-50DS72A 50英寸 无线网络 安卓智能 4K超高清液晶电视
1322968 <em>夏普</em>(SHARP)LCD-40DS13A 40英寸液晶电视
1322963 <em>夏普</em>(SHARP)LCD-32DS13A 32英寸液晶电视
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

如果看了关于在solr后台管理页面进行的相关操作后,再看这个solrJ应该就瞬间会了。

使用solrJ操作solr常用方法 【注释非常详细,非常好】的更多相关文章

  1. 利用SolrJ操作solr API完成index操作

    使用SolrJ操作Solr会比利用httpClient来操作Solr要简单.SolrJ是封装了httpClient方法,来操作solr的API的.SolrJ底层还是通过使用httpClient中的方法 ...

  2. 使用solrj操作solr索引库

    (solrj)初次使用solr的开发人员总是很郁闷,不知道如何去操作solr索引库,以为只能用<五分钟solr4.5教程(搭建.运行)>中讲到的用xml文件的形式提交数据到索引库,其实没有 ...

  3. 使用solrj操作solr索引库,solr是lucene服务器

    客户端开发 Solrj 客户端开发 Solrj Solr是搭建好的lucene服务器 当然不可能完全满足一般的业务需求 可能 要针对各种的架构和业务调整 这里就需要用到Solrj了 Solrj是Sol ...

  4. Solr 09 - SolrJ操作Solr单机服务 (Solr的Java API)

    目录 1 SolrJ是什么 2 SolrJ对索引的CRUD操作 2.1 创建Maven工程(打包方式选择为jar) 2.2 配置pom.xml文件, 加入SolrJ的依赖 2.3 添加和修改索引 2. ...

  5. solrj 操作 solr 单机版

    一.导入 jar 包 <dependency> <groupId>org.apache.solr</groupId> <artifactId>solr- ...

  6. solrj 操作 solr 集群版

    一.添加 @Test public void testAddDocument() throws Exception{ //创建一个集群的连接,应该使用 CloudSolrServer,//zkHost ...

  7. Solr 14 - SolrJ操作SolrCloud集群 (Solr的Java API)

    目录 1 pom.xml文件的配置 2 SolrJ操作SolrCloud 1 pom.xml文件的配置 项目的pom.xml依赖信息请参照: Solr 09 - SolrJ操作Solr单机服务 (So ...

  8. Java操作Solr之SolrJ

    添加SolrJ的jar包 solrj是访问Solr服务的java客户端,提供索引和搜索的请求方法,SolrJ通常在嵌入在业务系统中,通过SolrJ的API接口操作Solr服务, <depende ...

  9. solr简介、学习详细过程!(超详细~)

    solr是什么呢? 一.Solr它是一种开放源码的.基于 Lucene Java 的搜索服务器,易于加入到 Web 应用程序中. 二.Solr 提供了层面搜索(就是统计).命中醒目显示并且支持多种输出 ...

随机推荐

  1. Data Consistency Primer

    云应用通常来说,使用的数据很多都是分散的,来自不同的数据仓库.在这种环境下,管理和保持数据一致性是很复杂的,无论是在并发跟可用性上都可能出问题.开发者有的时候就需要为了强一致性而牺牲可用性了.这也就意 ...

  2. 微信小程序 Echarts 异步数据更新

    微信小程序 Echarts 异步数据更新的练习,被坑了很多次,特作记录. 作者:罗兵 地址:https://www.cnblogs.com/hhh5460/p/9989805.html 0.效果图   ...

  3. Linux下的openvpn配置 与 easy-rsa3的证书生成

    #注意:以下操作由服务端操作即可#PS:为什么我找不到var文件??============安装===============wget -O /etc/yum.repos.d/epel.repo ht ...

  4. TMS320VC5509驱动74HC595芯片

    1. 5509A有3个MCBSP模块,其中模块MCBSP可以配置成SPI模式,不过实际使用的时候需要把CLKX1和CLKR1接在一起,暂时没搞明白原因 MCBSP有6个引脚,DR0 RX0 作为数据的 ...

  5. ECMAScript6——Set数据结构

    /** * 数据结构 Set */ // ----------------------------------------------------- /** * 集合的基本概念:集合是由一组无序且唯一 ...

  6. (2)学习笔记 ) ASP.NET CORE微服务 Micro-Service ---- .NetCore启动配置 和 .NetCoreWebApi

    什么是.Net Core?.Net Core是微软开发的另外一个可以跨Linux.Windows.mac等平台的.Net.Net Core相关知识看文章地步dotnet dllname.dll 运行P ...

  7. redis安装启动和数据操作

    redis安装和启动 1.安装包下载地址 >> redis基本数据类型 string(字符串和数值) .list(列表/队列).hashmap(哈希表[键唯一]). set(集合[值唯一] ...

  8. HTML 表格实例

    1.表格这个例子演示如何在 HTML 文档中创建表格. <p>每个表格由 table 标签开始.</p><p>每个表格行由 tr 标签开始.</p>&l ...

  9. cadence allegro 封装原点修改

    打开 dra文件后 在菜单栏 setup - change drawing origin 在命令栏输入 新的参考点位置 如想更改新坐标位置为 1,2 .输入  x 1 2

  10. Catlike学习笔记(1.4)-使用Unity构建分形

    又两个星期没写文章了,主要是沉迷 Screeps 这个游戏,真的是太好玩了导致我这两个礼拜 Github 小绿点几乎天天刷.其实想开一个新坑大概把自己写 AI 的心路历程记录下,不过觉得因为要消耗太多 ...