导入所需坐标,注意与低版本HTTPClient冲突
<dependency>
<groupId>org.apache.solr</groupId>
<artifactId>solr-solrj</artifactId>
<version>7.3.1</version>
</dependency>
//连接服务器
HttpSolrClient solrClient = new HttpSolrClient.Builder()
//设置solr的地址,http://127.0.0.1:8080/solr为项目路径,car为核的名字
.withBaseSolrUrl("http://127.0.0.1:8080/solr/car")
.build();
新增
@Test
public void test1() throws IOException, SolrServerException {
//连接服务器
HttpSolrClient solrClient = new HttpSolrClient.Builder()
//设置solr的地址,http://127.0.0.1:8080/solr为项目路径,car为核的名字
.withBaseSolrUrl("http://127.0.0.1:8080/solr/solr")
.build();
//创建SolrInputDocument对象
SolrInputDocument document = new SolrInputDocument();
//添加字段和值
document.addField("id", 6);
document.addField("car_name","宝马3系");
document.addField("car_money",28);
document.addField("car_desc","这是一款宝马旗下的中低端轿车");
//调用add方法增加
solrClient.add(document);
//commit提交事务
solrClient.commit();
//关闭连接
solrClient.close();
}
新增完毕后打开浏览器查询即可
修改(修改和新增一样,有id就修改,没有id则新增)
@Test
public void test1() throws IOException, SolrServerException {
//连接服务器
HttpSolrClient solrClient = new HttpSolrClient.Builder()
//设置solr的地址,http://127.0.0.1:8080/solr为项目路径,car为核的名字
.withBaseSolrUrl("http://127.0.0.1:8080/solr/solr")
.build();
//创建SolrInputDocument对象
SolrInputDocument document = new SolrInputDocument();
//添加字段和值
document.addField("id", 6);
document.addField("car_name","宝马5系");
document.addField("car_money",50);
document.addField("car_desc","这是一款宝马旗下的中端轿车");
//调用add方法增加
solrClient.add(document);
//commit提交事务
solrClient.commit();
//关闭连接
solrClient.close();
}
删除
@Test
public void test1() throws IOException, SolrServerException {
//连接服务器
HttpSolrClient solrClient = new HttpSolrClient.Builder()
//设置solr的地址,http://127.0.0.1:8080/solr为项目路径,car为核的名字
.withBaseSolrUrl("http://127.0.0.1:8080/solr/solr")
.build();
//根据id删除数据
solrClient.deleteById("6");
//commit提交事务
solrClient.commit();
//关闭连接
solrClient.close();
}
通过实体类新增
@Field():为了防止与配置文件中的字段对应不上,所以添加此注解有效的识别
@Field("id")
private String id;
@Field("car_name")
private String carName;
@Field("car_money")
private double carMoney;
@Field("car_desc")
private String carDesc;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getCarName() {
return carName;
}
public void setCarName(String carName) {
this.carName = carName;
}
public double getCarMoney() {
return carMoney;
}
public void setCarMoney(double carMoney) {
this.carMoney = carMoney;
}
public String getCarDesc() {
return carDesc;
}
public void setCarDesc(String carDesc) {
this.carDesc = carDesc;
}
@Test
public void test4() throws IOException, SolrServerException {
Car car = new Car();
car.setId("6");
car.setCarName("宝马5系");
car.setCarMoney(58);
car.setCarDesc("这是一款宝马旗下的中端轿车");
//调用addBean添加数据
solrClient.addBean(car);
}
通过实体类查询
@Test
public void test5() throws IOException, SolrServerException {
//查询条件对象
SolrQuery query = new SolrQuery();
//查询所有 query.setQuery("*:*");
//条件查询,名字是奥迪的 query.setQuery("car_name:奥迪");
//过滤条件,价格大于20 query.setFilterQueries("car_money:[20 TO *]");
//分页查询 query.setStart(0).setRows(5);
//排序 根据价格倒序 query.setSort("car_money",SolrQuery.ORDER.desc);
//查询指定字段 query.setFields("id,car_name");
QueryResponse response = solrClient.query(query);
List<Car> list = response.getBeans(Car.class);
System.out.println(list);
}
高亮查询
@Test
public void test6() throws IOException, SolrServerException {
//查询条件对象
SolrQuery query = new SolrQuery();
query.setQuery("car_name:宝马");
//开启高亮查询
query.setHighlight(true);
//添加高亮显示字段
query.addHighlightField("car_name")
.setHighlightSimplePre("<font color='red'>")
.setHighlightSimplePost("</font>");
QueryResponse response = solrClient.query(query);
//这里拿到的是普通的一个对象的结果集
List<Car> beans = response.getBeans(Car.class);
//拿到高亮的结果集
Map<String, Map<String, List<String>>> highlighting = response.getHighlighting();
System.out.println(beans);
System.out.println(highlighting);
//遍历替换操作
for (int i = 0; i < beans.size(); i++) {
//先获得对象的id(有了id可以从map里面拿数据)
String id = beans.get(i).getId();
//通过高亮结果集把id传进去,获得字段,在获得他的下标
String car_name = highlighting.get(id).get("car_name").get(0);
beans.get(i).setCarName(car_name);
System.out.println(car_name);
}
System.out.println(beans);
}
相对应的解释
项目中如何使用Solr
solr可以将数据库中的数据导入到solr里面去
也可以是新增数据到数据库的时候直接新增到solr里面(一定要新增到数据库里面,有了id才能够新增到solr里面)
以后查询的时候可以直接去solr里面查询,减缓数据库的压力,并且还可以进行高亮显示,查询速度较快,solr就是索引,查询速度快(做商品列表的时候可以使用)