Solrj的说明:
用于访问solr的java客户端程序,提供了操作solr服务的增删改查方法。
maven依赖:
<dependencies>
<!-- solr-solrj -->
<dependency>
<groupId>org.apache.solr</groupId>
<artifactId>solr-solrj</artifactId>
<version>4.10.3</version>
</dependency>
<!-- commons-logging -->
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.1.3</version>
</dependency>
<!-- junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
</dependencies>
代码实现:
package com.hengsheng.demo;
import com.itheima.entity.Product;
import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrServer;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.impl.HttpSolrServer;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.junit.Test;
import java.io.IOException;
import java.util.List;
import java.util.Map;
/**
* @author:DYB.
* @Date :Created in 2018/9/3 9:09
*/
public class SolrText {
private SolrServer solrServer = new HttpSolrServer("http://localhost:8088/solr/collection1");
@Test
/*添加或修改的solr的方法,存在就修改,不存在就添加(根据id)*/
public void testSolrText() throws IOException, SolrServerException {
Product product = new Product();
product.setPid("8000");
product.setName("iphone6s");
product.setCatalogName("手机");
product.setPrice(9999);
product.setDescription("西瓜");
product.setPicture("126.jpg");
solrServer.addBean(product);
solrServer.commit();
}
@Test
/*根据id删除solr内容*/
public void testSolrUpdate() throws Exception{
solrServer.deleteById("20");
solrServer.commit();
}
@Test
/*删除所有,也可以自己指定条件*/
public void testSolrTextB() throws Exception{
solrServer.deleteByQuery("*:*");
solrServer.commit();
}
@Test
/*查询全部内容*/
public void testSolrTextC() throws Exception {
//创建solrQuery封装查询条件
SolrQuery sq = new SolrQuery("*:*");
//执行搜索,得到查询响应对象
QueryResponse response = solrServer.query(sq);
System.out.println("搜索到的总数量:"+response.getResults().getNumFound());
//获取搜索结果,并转化成实体类集合
List<Product> products = response.getBeans(Product.class);
for (Product product : products) {
System.out.println("<---------分割线-------->");
System.out.println(product);
}
}
@Test
/*复杂查询*/
public void testSolrTextD() throws Exception {
//创建SolrQuery封装查询对象
SolrQuery sq = new SolrQuery();
//setQuery:封装查询条件
sq.setQuery("name:彩色");
//addFilterQuery:添加过滤条件
sq.addFilterQuery("price:[10 TO 20]");
//addSort:添加排序条件
sq.addSort("price", SolrQuery.ORDER.desc);
//setStart:设置分页开始记录数 与limit的每个问号参数相同
sq.setStart(0);
//设置每页显示记录数
sq.setRows(5);
//设置搜索需要返回的域(默认返回的是全部)
sq.setFields("pid,name,price");
//设置开启高亮显示
sq.setHighlight(true);
//设置高亮格式前缀
sq.setHighlightSimplePre("<font color='red'>");
//设置高亮显示后缀
sq.setHighlightSimplePost("</font>");
//执行搜索,得到查询响应对象
QueryResponse response = solrServer.query(sq);
System.out.println("搜索到的总数量:"+response.getResults().getNumFound());
//通过泛型方法getBeans<T>得到Product集合对象
List<Product> products = response.getBeans(Product.class);
//通过getHighlighting得到高亮显示的集合
Map<String, Map<String, List<String>>> map = response.getHighlighting();
//循环遍历集合对象,封装高亮显示的集合
for (Product product : products) {
Map<String, List<String>> mapA = map.get(product.getPid());
String keywords = mapA.get("keywords").get(0);
product.setName(keywords);
System.out.println(product);
}
}
}