Solr在java中的使用

更新时间:2019-04-10 10:26:53点击次数:221次
导入所需坐标,注意与低版本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就是索引,查询速度快(做商品列表的时候可以使用)

本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责,本站只提供参考并不构成任何投资及应用建议。本站是一个个人学习交流的平台,网站上部分文章为转载,并不用于任何商业目的,我们已经尽可能的对作者和来源进行了通告,但是能力有限或疏忽,造成漏登,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

  • 项目经理 点击这里给我发消息
  • 项目经理 点击这里给我发消息
  • 项目经理 点击这里给我发消息
  • 项目经理 点击这里给我发消息