Solr在java中的使用-05

导入所需坐标,注意与低版本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就是索引,查询速度快(做商品列表的时候可以使用)

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值