文章目录
1.什么是solrj?
SolrJ是操作Solr的JAVA客户端,它提供了增加、修改、删除、查询Solr 索引的JAVA接口。SolrJ针对Solr,提供了Rest的 HTTP接口进行了封装,SolrJ底层是通过使用HttpClient中的方法来完成Solr的操作。
2.搭建工程
2.1.导入相关jar包
非maven工程需要将solr安装包目录\dist\solrj-lib\内的所有jar导入
<!-- https://mvnrepository.com/artifact/org.apache.solr/solr-solrj -->
<dependency>
<groupId>org.apache.solr</groupId>
<artifactId>solr-solrj</artifactId>
<version>8.7.0</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
3.对索引库做增删改查
3.1.添加(以实体类的方式)
solrj支持对数据表做实体映射连接,通过提供的@field注解,来与实体类做隐式映射
注解 | 作用 |
---|---|
@Field | 用来对应实体类的属性做域映射 |
data-config.xml文件里面的实体映射
package test_solrj;
import org.apache.solr.client.solrj.beans.Field;
public class Commodity {
@Field("id")
private String id;
@Field("prod_title")
private String title;
@Field("prod_origin_price")
private Double original_price;
@Field("prod_price")
private Double price;
@Field("prod_category_name")
private String category_name;
@Field("prod_pic_url")
private String main_pic_url;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public Double getOriginal_price() {
return original_price;
}
public void setOriginal_price(Double original_price) {
this.original_price = original_price;
}
public Double getPrice() {
return price;
}
public void setPrice(Double price) {
this.price = price;
}
public String getCategory_name() {
return category_name;
}
public void setCategory_name(String category_name) {
this.category_name = category_name;
}
public String getMain_pic_url() {
return main_pic_url;
}
public void setMain_pic_url(String main_pic_url) {
this.main_pic_url = main_pic_url;
}
@Override
public String toString() {
return "Commodity [id=" + id + ", title=" + title + ", original_price=" + original_price + ", price=" + price
+ ", category_name=" + category_name + ", main_pic_url=" + main_pic_url + "]";
}
public Commodity() {
super();
}
}
添加方法
public class Test01 {
final static String baseUrl = "http://localhost:8081/solr/core_01";
@Test
public void addIndex() throws IOException, SolrServerException {
// 1.建立连接
HttpSolrClient client = new HttpSolrClient.Builder(baseUrl).build();
// 2.创建一个文档对象
SolrInputDocument inputDocument = new SolrInputDocument();
// 向文档中添加域以及对应的值(注意:所有的域必须在schema.xml中定义过,前两篇导入时已定义)
inputDocument.addField("id", "6");
inputDocument.addField("prod_title", "测试表标题");
inputDocument.addField("prod_category_name", "测试分类");
inputDocument.addField("prod_origin_price", 99.9);
inputDocument.addField("prod_price", 87.0);
inputDocument.addField("prod_pic_url", "test");
// 3.添加
UpdateResponse response = client.add(inputDocument);
// 4.提交,关闭连接
client.commit();
client.close();
System.out.println("添加完成");
}
}
3.3.修改(update)
solrj提供的修改其实是根据索引库的id来操作的,同样是用添加的方式
添加的时候会检查提供的唯一id,如果当前id不存在则直接添加,如果id存在,这会做覆盖的操作
因为索引库的id是具有唯一性的
我们修改一下上面的插入语句,id不变,再次执行语句,没有新插入,标题修改了
public class Test01 {
final static String baseUrl = "http://localhost:8081/solr/core_01";
@Test
public void addIndex() throws IOException, SolrServerException {
// 1.建立连接
HttpSolrClient client = new HttpSolrClient.Builder(baseUrl).build();
// 2.创建一个文档对象
SolrInputDocument inputDocument = new SolrInputDocument();
// 向文档中添加域以及对应的值(注意:所有的域必须在schema.xml中定义过,前两篇导入时已定义)
inputDocument.addField("id", "6");
inputDocument.addField("prod_title", "修改了");
inputDocument.addField("prod_category_name", "测试分类");
inputDocument.addField("prod_origin_price", 99.9);
inputDocument.addField("prod_price", 87.0);
inputDocument.addField("prod_pic_url", "test");
// 3.添加
UpdateResponse response = client.add(inputDocument);
// 4.提交,关闭连接
client.commit();
client.close();
System.out.println("修改完成");
}
}
3.4.删除
删除有很多中方法
常用的通过id删除,
通过查询语句删除
以ID删除
public class Test01 {
final static String baseUrl = "http://localhost:8081/solr/core_01";
@Test
public void addIndex() throws IOException, SolrServerException {
// 1.建立连接
HttpSolrClient client = new HttpSolrClient.Builder(baseUrl).build();
// 以id删除索引记录
UpdateResponse response = client.deleteById("5");
// 4.提交,关闭连接
client.commit();
client.close();
System.out.println("完成");
}
}
批量删除(以ID)
public class Test01 {
final static String baseUrl = "http://localhost:8081/solr/core_01";
@Test
public void addIndex() throws IOException, SolrServerException {
// 1.建立连接
HttpSolrClient client = new HttpSolrClient.Builder(baseUrl).build();
List<String> list = new ArrayList<String>();
list.add("111");
list.add("6");
// 以id删除索引记录
UpdateResponse response = client.deleteById(list);
// 4.提交,关闭连接
client.commit();
client.close();
System.out.println("完成");
}
}
以条件删除(query)
solrj支持以查询的方式删除符合条件的索引记录
public class Test01 {
final static String baseUrl = "http://localhost:8081/solr/core_01";
@Test
public void addIndex() throws IOException, SolrServerException {
// 1.建立连接
HttpSolrClient client = new HttpSolrClient.Builder(baseUrl).build();
List<String> list = new ArrayList<String>();
list.add("111");
list.add("6");
// 查询匹配分类类目“毛衣”
UpdateResponse response = client.deleteByQuery("prod_category_name:毛衣");
// 4.提交,关闭连接
client.commit();
client.close();
System.out.println("完成");
}
}
删除所有
public class Test01 {
final static String baseUrl = "http://localhost:8081/solr/core_01";
@Test
public void addIndex() throws IOException, SolrServerException {
// 1.建立连接
HttpSolrClient client = new HttpSolrClient.Builder(baseUrl).build();
List<String> list = new ArrayList<String>();
list.add("111");
list.add("6");
// 删除所有
UpdateResponse response = client.deleteByQuery("*:*");
// 4.提交,关闭连接
client.commit();
client.close();
System.out.println("完成");
}
}
3.5.查询
查询单个
@Test
public void testQuery() throws Exception{
//1.创建连接
HttpSolrClient solrServer = new HttpSolrClient.Builder("http://localhost:8983/solr/zym").build();
//2.创建查询语句
SolrQuery query = new SolrQuery();
//3.设置查询条件
query.set("q", "id:5");
//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("product_title")+" ");
System.out.println("卖点:"+solrDocument.get("product_sell_point")+" ");
}
}
条件查询
@Test
public void testQueryByCon() throws Exception{
//1.创建连接
HttpSolrClient solrServer = new HttpSolrClient.Builder("http://localhost:8983/solr/zym").build();
//2.创建查询语句
SolrQuery query = new SolrQuery();
//3.设置查询条件
query.set("q", "*款");//设置查询关键字
query.setSort("id", SolrQuery.ORDER.desc);//按照id降序排列
query.setStart(0);
query.setRows(5);//分页条件
query.set("df", "product_sell_point");//默认在商品卖点域进行查询
//4、执行查询
QueryResponse queryResponse = solrServer.query(query);
//5.获取文档列表
SolrDocumentList documentList = queryResponse.getResults();
System.out.println("总记录数:" + documentList.getNumFound());
for (SolrDocument solrDocument : documentList) {
System.out.println("id:"+solrDocument.get("id")+" ");
System.out.println("标题:"+solrDocument.get("product_title")+" ");
System.out.println("卖点:"+solrDocument.get("product_sell_point")+" ");
}
}