文章目录
- 1.什么是solrj?
- 2.搭建工程
- 2.1.导入相关jar包
- 3.对索引库做增删改查
- 3.1.添加(以实体类的方式)
- 添加方法
- 3.3.修改(update)
- 3.4.删除
- 以ID删除
- 批量删除(以ID)
- 以条件删除(query)
- 删除所有
- 3.5.查询
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;}@Overridepublic 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";@Testpublic 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";@Testpublic 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";@Testpublic 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";@Testpublic 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";@Testpublic 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";@Testpublic 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")+" ");}
}