POM 文件:

<!-- solr客户端 -->
<dependency>
<groupId>org.apache.solr</groupId>
<artifactId>solr-solrj</artifactId>
<version>4.10.3</version>
</dependency>

JAVA 代码:

package com.gdbd.solrj;

import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrServer;
import org.apache.solr.client.solrj.impl.HttpSolrServer;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.common.SolrDocument;
import org.apache.solr.common.SolrDocumentList;
import org.apache.solr.common.SolrInputDocument; import java.util.List;
import java.util.Map;
import java.util.Scanner; /**
* @Description: SolrJ 添加数据测试类
* @Author: DGBD
* @CreateDate: 2018/12/31 15:57
* @UpdateUser: yc
* @UpdateDate: 2018/12/31 15:57
* @UpdateRemark: 修改内容
* @博客地址: https://www.cnblogs.com/mlq2017/
* @Version: 1.0
*/
public class TestSolrJ { public static void main(String[] args) {
try {
do {
System.out.println("....请选择你的操作....");
System.out.println("1):向 solr 索引库添加数据");
System.out.println("2):查询 solr 索引库数据");
System.out.println("3):修改 solr 索引库数据");
System.out.println("4):删除 solr 索引库数据");
System.out.println("5):根据 查询 删除 solr 索引库数据");
System.out.println("请输入....");
Scanner input = new Scanner(System.in);
int num = input.nextInt();
switch (num) {
case 1:
testAddDocument();
break;
case 2:
testselDocument();
break;
case 3:
break;
case 4:
testdelDocument();
break;
case 5:
testdelQueryDocument();
break;
}
} while (true);
} catch (Exception e) {
e.printStackTrace();
}
} /***
* 向 solr 索引库添加数据
* @throws Exception
*/
public static void testAddDocument() throws Exception {
//01、创建一个 SolrServer 对象。创建一个 HTTPSolrServer对象。需要指定 solr 服务的 url
SolrServer solrServer = new HttpSolrServer("http://192.168.31.206:8080/solr/collection1");
//02、创建一个文档对象SolrInputDocument
SolrInputDocument document = new SolrInputDocument();
//03、向文档中添加域,必须有 id 域,域的名称必须在 schema.xml
document.addField("id", "123");
document.addField("item_title", "测试商品标题2");
document.addField("item_sell_point", "测试商品买点2");
document.addField("item_price", 1000);
document.addField("item_image", "测试商品图片2");
document.addField("item_category_name", "测试商品分类名称2");
document.addField("item_desc", "测试商品描述2");
SolrInputDocument document1 = new SolrInputDocument();
//03、向文档中添加域,必须有 id 域,域的名称必须在 schema.xml
document1.addField("id", "test001");
document1.addField("item_title", "测试商品标题1");
document1.addField("item_sell_point", "测试商品买点1");
document1.addField("item_price", 1000);
document1.addField("item_image", "测试商品图片1");
document1.addField("item_category_name", "测试商品分类名称1");
document1.addField("item_desc", "测试商品描述1");
//04、把文档对象写入索引库
solrServer.add(document);
solrServer.add(document1);
solrServer.commit();
System.out.println("成功插入...............................");
} /***
* 查询 solr 索引库数据
*
* 提示:查询所有(*:*)不能设置高亮显示
* 分页不设置默认为(0-10)
* 如果查询条件上没有指定在哪一个 业务域上搜索 则在默认搜索域中搜索
*
* @throws Exception
*/
public static void testselDocument() throws Exception {
//01、创建一个 SolrServer 对象。创建一个 HTTPSolrServer对象。需要指定 solr 服务的 url
SolrServer solrServer = new HttpSolrServer("http://192.168.31.206:8080/solr/collection1");
//02、创建一个 solrQuery 查询对象
SolrQuery solrQuery = new SolrQuery();
//设置查询条件:过滤条件、分页条件...
solrQuery.set("q", "手机");
//solrQuery.setQuery("*:*"); //分页条件(从第 30 条开始查询,每页显示10 条)
solrQuery.set("start", 0);//solrQuery.setStart();
solrQuery.set("rows", 5);//solrQuery.setRows(); //默认搜索域
solrQuery.set("df", "item_keywords"); //设置高亮
solrQuery.set("hl", true);//solrQuery.setHighlight(true); //设置高亮显示域(对哪一个域进行 高亮显示:这里设置标题域为高亮)
solrQuery.set("hl.fl", "item_title");//solrQuery.addHighlightField("item_title"); //高亮显示前缀后缀
solrQuery.set("hl.simple.pre", "<em>");//solrQuery.setHighlightSimplePre("<em>");
solrQuery.set("hl.simple.post", "</em>");//solrQuery.setHighlightSimplePost("</em>"); //03、执行查询(得到一个 Response 对象)
QueryResponse response = solrServer.query(solrQuery);
//04、取查询结果
SolrDocumentList results = response.getResults();
//05、取查询总记录数
System.out.println("取查询总记录数:>>>>" + results.getNumFound());
for (SolrDocument item : results) {
System.out.println(item.get("id"));
//06、取高亮显示
Map<String, Map<String, List<String>>> highlighting = response.getHighlighting();
List<String> list = highlighting.get(item.get("id")).get("item_title");
String title = "";
if (list != null && list.size() > 0) {
title = list.get(0);//获取高亮的信息
} else {
title = (String) item.get("item_title");//没有高亮信息 则显示默认的
}
System.out.println(title);
System.out.println(item.get("item_sell_point"));
System.out.println(item.get("item_price"));
System.out.println(item.get("item_image"));
System.out.println(item.get("item_category_name"));
System.out.println(item.get("item_desc"));
System.out.println("===========================================");
} } /***
* 修改 solr 索引库数据
* @throws Exception
*/
public static void testmodfyDocument() throws Exception { } /***
* 根据 Id 删除 solr 索引库数据
* @throws Exception
*/
public static void testdelDocument() throws Exception {
//01、创建一个 SolrServer 对象。创建一个 HTTPSolrServer对象。需要指定 solr 服务的 url
SolrServer solrServer = new HttpSolrServer("http://192.168.31.206:8080/solr/collection1");
//根据 Id 删除 solr 中的数据
solrServer.deleteById("test001");
solrServer.commit();
} /***
* 根据 查询 删除 solr 索引库数据
* @throws Exception
*/
public static void testdelQueryDocument() throws Exception {
//01、创建一个 SolrServer 对象。创建一个 HTTPSolrServer对象。需要指定 solr 服务的 url
SolrServer solrServer = new HttpSolrServer("http://192.168.31.206:8080/solr/collection1");
//根据 Id 删除 solr 中的数据
solrServer.deleteByQuery("*:*");
solrServer.commit();
}
}

===========配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.2.xsd
"> <!--扫描-->
<context:component-scan base-package="com.gdbd"/> <!--配置单机版solr的连接-->
<bean id="httpSolrServer" class="org.apache.solr.client.solrj.impl.HttpSolrClient">
<constructor-arg name="baseURL" value="http://192.168.31.212:8080/solr/collection1"/>
</bean> <!--配置集群版solr的连接-->
<bean id="cloudSolrServer" class="org.apache.solr.client.solrj.impl.CloudSolrClient">
<constructor-arg name="zkHost" value="192.168.31.209:2181,192.168.209:2182,192.168.31.209:2183"/>
<property name="defaultCollection" value="collection2"/>
</bean> </beans>

pojo: 

package com.gdbd.pojo;

import com.fasterxml.jackson.annotation.JsonSubTypes;
import org.apache.solr.client.solrj.beans.Field; /**
* @Description: 测试类
* @Author: DGBD
* @CreateDate: 2019/1/10 10:04
* @UpdateUser: yc
* @UpdateDate: 2019/1/10 10:04
* @UpdateRemark: 修改内容
* @博客地址: https://www.cnblogs.com/mlq2017/
* @Version: 1.0
*/
public class Passage { // 用于标明solr索引的id,需要放在字段上
@Field("id")
private String id;
@Field("content")
private String content;
@Field("name")
private String name;
@Field("title")
private String title; public String getId() {
return id;
} public void setId(String id) {
this.id = id;
} .......
}

注解单机版操作:

package com.gdbd.solr;

import com.gdbd.pojo.Passage;
import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.impl.HttpSolrClient;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.common.SolrDocument;
import org.apache.solr.common.SolrDocumentList;
import org.apache.solr.common.util.NamedList;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; import java.io.IOException;
import java.util.List;
import java.util.Map; /**
* @Description: solr 单机测试类
* @Author: DGBD
* @CreateDate: 2019/1/10 10:14
* @UpdateUser: yc
* @UpdateDate: 2019/1/10 10:14
* @UpdateRemark: 修改内容
* @博客地址: https://www.cnblogs.com/mlq2017/
* @Version: 1.0
*/
public class SolrTest { private HttpSolrClient solrServer = null; @Before
public void before() {
//加载配置文件
ApplicationContext context =
new ClassPathXmlApplicationContext("spring-solr.xml");
//获取对象
solrServer = (HttpSolrClient) context.getBean("httpSolrServer");
} /***
* 添加信息
* @throws IOException
* @throws SolrServerException
*/
@Test
public void demo() throws IOException, SolrServerException {
for (int i = 0; i < 5; i++) {
//伪造添加的信息
Passage passage = new Passage("456" + i, "测试数据" + i, "MLQ" + i, "你好不好" + i);
//向solr中添加数据
solrServer.addBean(passage);
}
//提交
solrServer.commit();
} /***
* 查询数据
*/
@Test
public void sel() throws IOException, SolrServerException {
//创建一个 solrQuery 查询对象
SolrQuery solrQuery = new SolrQuery();
//设置查询条件:过滤条件、分页条件...
solrQuery.setQuery("name:MLQ");
/***
* 分页条件(从第 30 条开始查询,每页显示10 条)
* solrQuery.setStart();olrQuery.setRows();
*/
solrQuery.set("start", 0);
solrQuery.set("rows", 5);
//默认搜索域
solrQuery.set("df", "name");
/***
* 设置开启高亮
* solrQuery.setHighlight(true);
*/
solrQuery.set("hl", true);
/***
* 设置高亮显示域(对哪一个域进行 高亮显示:这里设置标题域为高亮)
* solrQuery.addHighlightField("item_title");
*/
solrQuery.set("hl.fl", "name"); /***
* 高亮显示前缀后缀
* solrQuery.setHighlightSimplePre("<em>");
* solrQuery.setHighlightSimplePost("</em>");
*/
solrQuery.set("hl.simple.pre", "<em>");
solrQuery.set("hl.simple.post", "</em>"); //执行查询(得到一个 Response 对象)
QueryResponse response = solrServer.query(solrQuery);
//取查询结果
SolrDocumentList results = response.getResults();
//取查询总记录数
System.out.println("取查询总记录数:>>>>" + results.getNumFound());
for (SolrDocument item : results) {
System.out.println("id--->" + item.get("id"));
//06、取高亮显示
String name = null;
Map<String, Map<String, List<String>>> highlighting = response.getHighlighting();
List<String> list = highlighting.get(item.get("id")).get("name");
if (list != null && list.size() > 0) {
name = list.get(0);//获取高亮的信息
} else {
name = (String) item.get("name");//没有高亮信息 则显示默认的
}
System.out.println("name--->" +name);
System.out.println("content--->" + item.get("content"));
System.out.println("title--->" + item.get("title"));
System.out.println("===========================================");
}
}
/***
* 删除所有数据
* @throws Exception
*/
@Test
public void testdelQueryDocument() throws Exception {
solrServer.deleteByQuery("*:*");
solrServer.commit();
}
@After
public void after() throws IOException {
solrServer.close();
}
}

注解集群版操作:

package com.gdbd.solr;

import com.gdbd.pojo.Passage;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.impl.CloudSolrClient;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; import java.io.IOException; /**
* @Description: solr 集群测试
* @Author: DGBD
* @CreateDate: 2019/1/11 8:45
* @UpdateUser: yc
* @UpdateDate: 2019/1/11 8:45
* @UpdateRemark: 修改内容
* @博客地址: https://www.cnblogs.com/mlq2017/
* @Version: 1.0
*/
public class SolrCloudTest { private CloudSolrClient solrServer = null; @Before
public void before() {
//加载配置文件
ApplicationContext context =
new ClassPathXmlApplicationContext("spring-solr.xml");
//获取对象
solrServer = (CloudSolrClient) context.getBean("cloudSolrServer");
}
@Test
public void demo() throws IOException, SolrServerException {
/***
* 创建cloudSolrServer,构造方法中指定zookeeper的地址列表
* CloudSolrServer solrServer = new CloudSolrServer("192.168.55.3:2181,192.168.55.3:2182,192.168.55.3:2183");
* 需要设置默认collection
* solrServer.setDefaultCollection("collection2");
*/
//伪造添加的信息
for (int i = 0; i < 5; i++) {
//伪造添加的信息
Passage passage = new Passage("456" + i, "测试数据" + i, "MLQ" + i, "你好不好" + i);
//向solr中添加数据
solrServer.addBean(passage);
}
//提交
solrServer.commit();
} /***
* 删除所有数据
* @throws Exception
*/
@Test
public void testdelQueryDocument() throws Exception {
solrServer.deleteByQuery("*:*");
solrServer.commit();
} @After
public void after() throws IOException {
solrServer.close();
}
}

分享知识-快乐自己:java代码 操作 solr的更多相关文章

  1. java代码操作solr搜索引擎的增删查改

    所需的包如图: 代码如下:package solr; import java.util.List;import java.util.Map; import org.apache.solr.client ...

  2. Java代码操作HDFS测试类

    1.Java代码操作HDFS需要用到Jar包和Java类 Jar包: hadoop-common-2.6.0.jar和hadoop-hdfs-2.6.0.jar Java类: java.net.URL ...

  3. 使用java代码操作Redis

    1导入pom.xml依赖 <dependency> <groupId>redis.clients</groupId> <artifactId>jedis ...

  4. java代码操作Redis

    1.导入需要的pom依赖 <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEn ...

  5. Java代码操作zookeeper

    .personSunflowerP { background: rgba(51, 153, 0, 0.66); border-bottom: 1px solid rgba(0, 102, 0, 1); ...

  6. 大数据之路week07--day01(HDFS学习,Java代码操作HDFS,将HDFS文件内容存入到Mysql)

    一.HDFS概述 数据量越来越多,在一个操作系统管辖的范围存不下了,那么就分配到更多的操作系统管理的磁盘中,但是不方便管理和维护,因此迫切需要一种系统来管理多台机器上的文件,这就是分布式文件管理系统 ...

  7. java:nginx(java代码操作ftp服务器)

    1.检查是否安装了vsftpd [root@linux01 ~]# rpm -qa|grep vsftpd 2.安装vsftpd [root@linux01 ~]# yum -y install vs ...

  8. Java代码操作HDFS(在/user/root/下面創建目錄)

    1.创建HDFS目录并打成jar包 package Hdfs; import java.io.IOException; import java.net.URI; import org.apache.h ...

  9. kerberos下JAVA代码操作hbase的方式(客户端方式,应用程序方式)

    (一)如果部署JAVA 代码的主机用户获取了kerberos权限情况下 假设主机名是:client su - client 登录主机后 kinit -kt /keytab的路径/client.keyt ...

随机推荐

  1. Android内容提供者

    一个应用中的数据库对别人是不会提供直接的访问的,而是提供接口给别人访问,但是一般应用开发的时候都是去获取别人的数据,而不是自己提供数据. 继承ContentProvider: 在Menifest中注册 ...

  2. use-svn-cmd(Linux)

    SVN是Subversion的简称,是一个开放源代码的版本控制系统,它采用了分支管理系统,是一个跨平台的软件,支持大多数常见的操作系统. svn命令行使用: 1.查看svn所支持的全部命令 $ svn ...

  3. CIA 读书笔记

    对此书的评价只有八个字:粗制滥造,到处粘贴. 对于通过表情识别人情绪的教程,最好要有图,图很重要,也最好有案例.

  4. 数据库导入Excel-从基础做起

    近期一直跟着师傅做考试系统的基础.每天与大量的数据打交道.数据的导入.数据的导出.视图的导入导出.核对信息等等,收获挺多的,培养了自己的耐心和细心,也进一步了解了数据库. 一切从基础做起! 来看看近期 ...

  5. SQLServer2008 统计表占用空间

    1.查看一张表占用的空间大小 EXEC sp_spaceused '表' 1.查看一个数据库中所有表占用空间大小 EXEC sp_MSforeachtable 'sp_spaceused " ...

  6. CAFFE学习笔记(一)Caffe_Example之训练mnist

    0.参考文献 [1]caffe官网<Training LeNet on MNIST with Caffe>; [2]薛开宇<读书笔记4学习搭建自己的网络MNIST在caffe上进行训 ...

  7. Asp.Net MVC3中如何进行单元测试?

    下面我们就以一个示例演示一下如何进行单元测试? public Model.UserInfo UpdateEntity(Model.UserInfo entity) { db.UserInfo.Atta ...

  8. 使用google的GSON解析json格式的数据

    GSON是谷歌提供的开源库,用来解析Json格式的数据,非常好用.如果要使用GSON的话,则要先下载gson-2.2.4.jar这个文件,如果是在Android项目中使用,则在Android项目的li ...

  9. jsp中嵌入的java代码执行对html的影响方式

    1 直接输出html标签嵌入到html中 <body> <h1>显示当前时间和日期</h1> <% Date date = new Date(); out.p ...

  10. as2解析json

    as2写的json解析,带容错,如果要做格式检查,得自己修改了,直接贴代码 //--------------------------------------------------json解析---- ...