前言:
SolrJ是什么?
SolrJ是Solr官方提供的Java Client,SolrJ是一个API,它使得Java应用程序很容易与SOLR对话。solrj隐藏了许多连接到solr的细节,并允许应用程序使用简单的高级方法与solr交互
.NET(C#)连接solr可以使用开源库SolrNet
github地址:https://github.com/SolrNet
添加SolrJ的引用:
1.若非maven项目
SolrJ的jar包就在solr的解压目录下,可以直接从/usr/local/solr-7.6.0/dist 下拷贝 solr-solrj-7.6.0.jar
solrJ也依赖一些jar包,这些jar包也在该目录下的solrj-lib文件夹中
2.若是Maven项目
则直接添加依赖,版本号就参考solr目录下的solrJ jar包的版本号
<dependency>
<groupId>org.apache.solr</groupId>
<artifactId>solr-solrj</artifactId>
<version>7.6.0</version>
</dependency>
编写测试代码:
首先启动solr服务
新建solrJTest.java:
新增/修改内容
修改内容就是使用同样的id,再新增一次即可
package com.taotao.rest.solrj;
import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.client.solrj.impl.HttpSolrClient;
import org.apache.solr.common.SolrInputDocument;
import org.junit.Test;
public class SolrjTest {
@Test
public void addDoc() throws Exception{
final String solrUrl = "http://120.77.204.80:8080/solr/new_core";
SolrClient solrClient=new HttpSolrClient.Builder(solrUrl).withConnectionTimeout(10000)
.withSocketTimeout(6000).build();
//创建SolrInputDocument对象
SolrInputDocument document=new SolrInputDocument();
// 第一个参数:域的名称,域的名称必须是在managed_schema.xml中定义的
// 第二个参数:域的值
// 注意:id的域不能少
document.addField("id", "005");
document.addField("title", "使用solrJ添加的文档");
document.addField("content", "这就是内容");
solrClient.add(document);
//提交
solrClient.commit();
}
}
报错了:java.lang.NoSuchMethodError:org.apache.http.impl.conn.PoolingHttpClientConnectionManager.setValidateAfterInactivity(I)V at org.apache.solr.client.solrj.impl.HttpClientUtil.createClient(HttpClientUtil.java:279)
报的是NoSuchMethodError,找不到方法,因为solrJ 引用了httpclient,所以是由于httpclient里找不到setValidateAfterInactivity这个方法,看了下原先的httpclient是4.3.5,但是solrJ依赖的httpclient是4.5.3,所以修改下httplcient的版本
运行测试代码,打开solrAdmin管理页
选择Query-->execute Query
可以看到已经成功添加
删除内容
@Test
public void deleteDoc() throws Exception{
final String solrUrl = "http://120.77.204.80:8080/solr/new_core";
SolrClient solrClient=new HttpSolrClient.Builder(solrUrl).withConnectionTimeout(10000)
.withSocketTimeout(6000).build();
//根据id删除
//solrClient.deleteById("005");
//根据查询条件删除
solrClient.deleteByQuery("*:*");
//提交
solrClient.commit();
}
查询内容
@Test
public void QueryDoc() throws Exception{
final String solrUrl = "http://120.77.204.80:8080/solr/new_core";
HttpSolrClient solrServer = new HttpSolrClient.Builder(solrUrl)
.withConnectionTimeout(10000)
.withSocketTimeout(60000)
.build();
SolrQuery query = new SolrQuery();
query.set("q", "id:005");
// 调用server的查询方法,查询索引库
QueryResponse response = solrServer.query(query);
// 查询结果
SolrDocumentList results = response.getResults();
// 查询结果总数
long cnt = results.getNumFound();
System.out.println("查询结果总数:" + cnt);
for (SolrDocument solrDocument : results) {
System.out.println(solrDocument.get("id"));
System.out.println(solrDocument.get("title"));
System.out.println(solrDocument.get("content"));
}
}
根据各种条件查询
@Test
public void QueryDocFiter() throws Exception {
final String solrUrl = "http://120.77.204.80:8080/solr/new_core";
HttpSolrClient solrServer = new HttpSolrClient.Builder(solrUrl).withConnectionTimeout(10000)
.withSocketTimeout(60000).build();
SolrQuery query = new SolrQuery();
query.setQuery("*:*");
// 设置过滤条件
query.setFilterQueries("content:内容");
// 设置排序
query.setSort("id", SolrQuery.ORDER.desc);
// 设置分页信息
query.setStart(0);
query.setRows(10);
// 设置显得的域的列表
query.setFields("id", "title", "content");
// 设置默认搜索域
query.set("df", "content");
// 设置高亮
query.setHighlight(true);
query.addHighlightField("content");
query.setHighlightSimplePre("<em>");
query.setHighlightSimplePost("</em>");
// 调用server的查询方法,查询索引库
QueryResponse response = solrServer.query(query);
// 查询结果
SolrDocumentList results = response.getResults();
// 查询结果总数
long cnt = results.getNumFound();
System.out.println("查询结果总数:" + cnt);
for (SolrDocument solrDocument : results) {
System.out.println(solrDocument.get("id"));
System.out.println(solrDocument.get("title"));
System.out.println(solrDocument.get("content"));
}
}