版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_39082031/article/details/79077784
SolrJ是solr众多客户端中最普通最常用的,啥也不说了,具体看代码:
1、创建maven工程,也可以不是maven,用maven只是为了管理项目方便,仅此而已;
2、既然创建的是maven工程,那么,就不得不说说 pom.xml 文件,pom.xml 中主要管理的就是依赖和插件,那么既然是 solr 客户端 solrj ,那么就一定要有 solrj 的 jar 包,下面是我的完整的 pom.xml,本来是想把 solrj 和Spring/SpringMVC整合在一起,形成一个完整的 web 工程,所以, pom.xml 文件就相对比较完整一些,不过内容虽多,但都有明确的注释,请看:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.wolfhome.hibernate</groupId> <artifactId>solrtest</artifactId> <packaging>war</packaging> <version>1.0</version> <!-- 依赖版本 --> <properties> <spring-version>4.3.2.RELEASE</spring-version> <releasetrain-version>Hopper-SR3</releasetrain-version> </properties> <!-- 依赖版本控制 --> <dependencyManagement> <dependencies> <!-- spring-framework-bom 解决spring不同模块的版本问题, 引入了spring-framework-bom后,后面引入的所有的spring依赖就不用声明version属性了, 和spring-framework-bom是一个版本 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-framework-bom</artifactId> <version>${spring-version}</version> <type>pom</type> <scope>import</scope> </dependency> <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-releasetrain</artifactId> <version>${releasetrain-version}</version> <scope>import</scope> <type>pom</type> </dependency> </dependencies> </dependencyManagement> <dependencies> <!-- servlet&jsp --> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> </dependency> <!-- JSP-api --> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>jsp-api</artifactId> <version>2.2</version> </dependency> <!-- JAVA标准标签库 高版本不需要jstl --> <dependency> <groupId>taglibs</groupId> <artifactId>standard</artifactId> <version>1.1.2</version> </dependency> <!-- spring相关依赖 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <exclusions> <exclusion> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> </dependency> <!-- springweb依赖jar --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> </dependency> <!-- springmvc依赖jar --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> </dependency> <!-- spring-aop --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aspects</artifactId> </dependency> <!-- spring-jdbc --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> </dependency> <!-- spring-tx --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-orm</artifactId> </dependency> <!-- 数据源:c3p0 --> <dependency> <groupId>c3p0</groupId> <artifactId>c3p0</artifactId> <version>0.9.1.2</version> </dependency> <!-- mysql驱动 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.38</version> </dependency> <!-- myBatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.5</version> </dependency> <!-- spring整合myBatis插件 --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>1.3.1</version> </dependency> <!-- spring对测试框架的支持 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <scope>test</scope> </dependency> <!-- junit单元测试 --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> <!--jsckson插件 --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>2.5.0</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.5.0</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.5.0</version> </dependency> <!-- 文件上传与下载 --> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.1</version> </dependency> <!-- https://mvnrepository.com/artifact/commons-io/commons-io --> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.5</version> </dependency> <!-- 日志处理 --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.25</version> </dependency> <!-- 发送http请求 --> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.2</version> </dependency> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpmime</artifactId> <version>4.5.2</version> </dependency> <!-- solr/solr-solrj --> <dependency> <groupId>org.apache.solr</groupId> <artifactId>solr-solrj</artifactId> <version>7.1.0</version> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.3.2</version> </dependency> </dependencies> <build> <finalName>solrtest</finalName> <plugins> <!-- 编译插件 --> <plugin> <artifactId>maven-compiler-plugin</artifactId> <!-- 插件的版本 --> <version>3.5.1</version> <!-- 编译级别 --> <configuration> <source>1.8</source> <target>1.8</target> <!-- 编码格式 --> <encoding>UTF-8</encoding> </configuration> </plugin> <!--jetty插件9.3.7:提供web应用运行的环境(tomcat) --> <plugin> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-maven-plugin</artifactId> <version>9.3.7.v20160115</version> <configuration> <!-- 扫描间隔 --> <scanIntervalSeconds>1</scanIntervalSeconds> <httpConnector> <!-- 端口号 --> <port>9090</port> </httpConnector> <webApp> <!-- 上下文根 --> <contextPath>/solrtest</contextPath> </webApp> </configuration> </plugin> </plugins> </build> </project>
2、首先得有个实体类,Person为例:
package com.wolfhome.solrtest.domain; import org.apache.solr.client.solrj.beans.Field; /** * Person实体类 * * <p>@ClassName:Person</p> * <p>Description <p> * <p>@Company:www.wolfhome.com</p> * @author Hrzhi * @date 2018年1月15日 上午9:02:24 */ public class Person { /** * person唯一标识 */ @Field("id") private String id; /** * person名字 */ @Field("name") private String name; /** * person年龄 */ @Field("age") private Integer age; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } @Override public String toString() { return "Person [id=" + id + ", name=" + name + ", age=" + age + "]"; } }
3、接下来就是打造客户端,连接solr,从solr缓存中取数据:
扫描二维码关注公众号,回复:
2894468 查看本文章
4、至此,运行每一个方法,都可以从 solr 中读取数据,注意:是读取 solr 中的数据,而不是直接读取数据库的数据。package com.wolfhome.solrtest.test; import java.io.IOException; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import org.apache.log4j.Logger; import org.apache.solr.client.solrj.SolrClient; 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.request.UpdateRequest; 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.junit.Before; import org.junit.Test; import com.wolfhome.commons.constant.util.UUIDUtils; import com.wolfhome.solrtest.domain.Person; /** * SolrService测试类 * * <p>@ClassName:SolrServiceTest</p> * <p>Description<p> * <p>@Company:www.wolfhome.com</p> * @author Hrzhi * @date 2018年1月9日 下午5:31:01 */ public class SolrjServiceTest { private SolrClient solrClient; private Logger logger = Logger.getLogger(getClass()); /** * 初始化方法,获取solrClient对象 * * @throws Exception */ @Before public void setUp() throws Exception { // 在url中指定core名称:enjoyshop String solrUrl = "http://127.0.0.1:8983/solr/mycore"; //Builder builder = new Builder(solrUrl); HttpSolrClient httpSolrClient = new HttpSolrClient.Builder(solrUrl) .withConnectionTimeout(5000)//设置连接超时时间 .withSocketTimeout(5000).build(); // 定义solr的客户端 this.solrClient = httpSolrClient; //new SolrjService(httpSolrClient); } /** * 增加文档 * * @throws Exception */ @Test public void testAdd() throws Exception { //创建一个SolrInputDocument类型的集合 Collection<SolrInputDocument> docList = new ArrayList<>(); //此处是多条数据添加 for (int i = 0; i < 5; i++) { Person person = new Person(); person.setId(UUIDUtils.getUUIDStr()); person.setName("王五" + (i + 1)); person.setAge(30 + i + 1); SolrInputDocument doc = new SolrInputDocument(); doc.addField("id", person.getId()); doc.addField("p_name", person.getName()); doc.addField("p_age", person.getAge()); docList.add(doc); } solrClient.add(docList); //此处是单条数据添加 /*Person person = new Person(); person.setId(UUIDUtils.getUUIDStr()); person.setName("王五"); person.setAge(30); SolrInputDocument doc = new SolrInputDocument(); doc.addField("id", person.getId()); doc.addField("p_name", person.getName()); doc.addField("p_age", person.getAge()); solrClient.add(doc);*/ //最后提交 solrClient.commit(); //添加完查询 testQuery(); } /** * 查询文档 * * @throws SolrServerException * @throws IOException */ @Test public void testQuery() throws SolrServerException, IOException{ SolrQuery query = new SolrQuery();//创建SolrQuery对象 query.set("q", "*:*");//设置 query.set("start", "0");//设置起始行 query.set("rows", "10");//设置行数 //query.set("sort", "p_id asc");//设置排序规则 QueryResponse response = solrClient.query(query);//创建QueryResponse对象 //获取SolrDocument列表 SolrDocumentList docList = response.getResults(); logger.info("文档数据条数是:" + docList.getNumFound()); //遍历SolrDocumentList for (SolrDocument document : docList) { logger.info("id:" + document.getFieldValue("id")); logger.info("p_name:" + document.getFieldValue("p_name")); logger.info("p_age:" + document.getFieldValue("p_age")); logger.info("-------------------------------------"); } } /** * 删除测试 * * @throws SolrServerException * @throws IOException */ @Test public void testDelete() throws SolrServerException, IOException{ //testDeleteById("a8495b8b-b201-4a2b-b5fe-47f81ccb6786"); testDeleteByQuery("*:*"); testQuery(); } /** * 删除文档BY ID * * @param id * @throws SolrServerException * @throws IOException */ public void testDeleteById(String id) throws SolrServerException, IOException { UpdateResponse response = solrClient.deleteById(id); solrClient.commit(); logger.info("result:" + response.getStatus() + "\t Qtime:" + response.getQTime()); } /** * 删除文档 BY QUERY * * @throws SolrServerException * @throws IOException */ public void testDeleteByQuery(String query) throws SolrServerException, IOException{ //设置响应 UpdateResponse response; //创建请求 UpdateRequest request = new UpdateRequest(); request.deleteByQuery(query); request.setCommitWithin(500); request.process(solrClient); logger.info("URL:" + request.getPath() + "\t XML:" + request.getXML() + "\t Method:" + request.getMethod()); response = solrClient.deleteByQuery(query); solrClient.commit(); logger.info("result:" + response.getStatus() + "\t Qtime:" + response.getQTime()); } /** * 测试更新文档 * * @throws SolrServerException * @throws IOException */ @Test public void testUpdate() throws SolrServerException, IOException{ testUpdateDocuments("702eee59-614c-446d-89f1-fc01787b36b2", "p_age", 94); } /** * 更新文档 * * @param id * 要更新的数据的id * @param fieldName * 要更新的数据的字段名称 * @param fieldValue * 更新的字段的字段值 * @throws SolrServerException * @throws IOException */ public void testUpdateDocuments(String id,String fieldName,Object fieldValue) throws SolrServerException, IOException{ HashMap<String, Object> operation = new HashMap<>(); operation.put("set", fieldValue); SolrInputDocument doc = new SolrInputDocument(); doc.addField("id", id); doc.addField(fieldName, operation); UpdateResponse response = solrClient.add(doc); logger.info("update doc id:" + id + "\t result:" + response.getStatus() + "\t Qtime:" + response.getQTime()); response = solrClient.commit(); logger.info("update doc id:" + id + "\t result:" + response.getStatus() + "\t Qtime:" + response.getQTime()); testQuery(); } }