栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

SolrJ初识

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SolrJ初识

什么是solrJ

SolrJ是操作Solr的JAVA客户端,它提供了增加、修改、删除、查询Solr索引的JAVA接口。SolrJ针对Solr提供了Rest的HTTP接口进行了封装,SolrJ底层是通过使用HttpClient中的方法来完成Solr的操作。

通过SolrJ请求Solr服务,最终Solr完成索引和搜索

搭建工程

https://gitee.com/csps/csp-demo-pro.git

以下所有代码【ssm-solr】工程中找到完整版

使用solrj完成索引维护 Java对象绑定

Solr提供两个有用的接口,UpdateResponse和QueryRespronse,它们可以很方便的处理特定域的对象,可以使您的应用程序更容易被理解。SolrJ支持通过@Filed注解隐式转换文档和任何类。

每个实例变量在Java对象可以映射到一个相应的Solr字段中,使用Field注解

打开配置文件【D:RunServersolr_homedemo_coreconf】

 
	
			   
			   
			   
			   
			   
			   
	 
   

引入solrj。注:根据solr服务选择版本


    org.apache.solr
    solr-solrj
    8.5.1

对应Bean对象

@Data
public class Products {

    @Field("id")
    private Integer pid;

    @Field("prod_pname")
    private String pname;

    private Integer catalog;

    @Field("prod_catalog_name")
    private String catalogName;

    @Field("prod_price")
    private Double price;

    private Integer number;

    @Field("prod_picture")
    private String picture;

    private Date releaseTime;

    @Field("prod_description")
    private String description;
}
添加/修改索引

在solr中,索引库中都会存在一个唯一键,如果一个Doucument的id存在,则执行修改操作,如果不存在,则执行添加操作。

@Test
public void add() throws IOException, SolrServerException {
    // 1.请求连接
    String baseSolrUrl = "http://127.0.0.1:8081/solr/demo_core";
    HttpSolrClient client = new HttpSolrClient.Builder(baseSolrUrl).build();

    // 2.数据库操作
    Products p = new Products();
    p.setPid(9999);
    p.setPname("后台测试添加Solr标题");
    p.setCatalogName("测试类别");
    p.setPrice(12.5);
    p.setDescription("测试数据描述");
    p.setPicture("csp.jpg");

    // 3.执行添加操作
    UpdateResponse response = client.addBean(p);

    // 4.提交事务
    client.commit();
    client.close();

    System.out.println("--- 添加成功 ---");
}
删除索引

指定ID删除索引

@Test
public void del() throws IOException, SolrServerException {
    // 1.请求连接
    String baseSolrUrl = "http://127.0.0.1:8081/solr/demo_core";
    HttpSolrClient client = new HttpSolrClient.Builder(baseSolrUrl).build();

    // 2.数据库操作

    // 3.执行删除操作
    UpdateResponse response = client.deleteById("9999");

    // 4.提交事务
    client.commit();
    client.close();

    System.out.println("--- 删除成功 ---");
}
查询功能 简单查询
@Test
public void simpleQuery() throws IOException, SolrServerException {
    // 1.请求连接
    String baseSolrUrl = "http://127.0.0.1:8081/solr/demo_core";
    HttpSolrClient client = new HttpSolrClient.Builder(baseSolrUrl).build();

    // 2.构建查询对象
    String q = "*:*";
    SolrQuery queryParams = new SolrQuery(q);
    QueryResponse response = client.query(queryParams);

    // 3.接收结果集
    List products = response.getBeans(Products.class);
    products.stream().forEach(p -> System.out.println(p));

    // 4.提交事务
    client.commit();
    client.close();

    System.out.println("--- 查询成功 ---");
}
复杂查询
@Test
public void complexQuery() throws IOException, SolrServerException {
    // 1.请求连接
    String baseSolrUrl = "http://127.0.0.1:8081/solr/demo_core";
    HttpSolrClient client = new HttpSolrClient.Builder(baseSolrUrl).build();

    // 2.构建查询对象
    SolrQuery solrQuery = new SolrQuery();

    // 2.1设置 q
    String keyword = "";
    if (StringUtils.isEmpty(keyword)) {
        solrQuery.set("q", "*:*");
    } else {
        solrQuery.set("q", keyword);
    }

    // 2.2设置 fq
    String catalogName = "手机饰品";
    // 2.2.1 类别筛选
    if (!StringUtils.isEmpty(catalogName)) {
        solrQuery.addFilterQuery("prod_catalog_name:" + catalogName);
    }
    // 2.2.1 价格筛选
    String price_str = "1-10";
    if (!StringUtils.isEmpty(price_str)) {
        // 拆分
        String[] arrs = price_str.split("-");
        if (arrs.length == 1) {
            solrQuery.addFilterQuery("prod_price:[" + arrs[0] + " TO *]");
        } else {
            String prefix = arrs[0];
            if (StringUtils.isEmpty(prefix)) {
                prefix = "*";
            }
            solrQuery.addFilterQuery("prod_price:[" + prefix + " TO " + arrs[1] + "]");
        }
    }

    // 2.3 排序
    solrQuery.addSort("prod_price", SolrQuery.ORDER.asc);

    // 2.4 设置分页功能
    solrQuery.setStart(0);
    solrQuery.setRows(15);

    // 2.5 设置回显 作用:保护隐私域
    solrQuery.setFields("id","prod_pname","prod_catalog_name");

    // 2.6 设置默认域
    solrQuery.set("df","prod_pname");

    // 2.7 高亮设置
    solrQuery.setHighlight(true);
    solrQuery.addHighlightField("prod_pname");
    solrQuery.setHighlightSimplePre("");
    solrQuery.setHighlightSimplePost("");

    QueryResponse response = client.query(solrQuery);

    // 处理高亮数据
    Map>> highlighting = response.getHighlighting();

    // 3.接收结果集
    List products = response.getBeans(Products.class);
    //products.stream().forEach(p -> System.out.println(p.getPname() + " :: " + p.getCatalogName() + " :: " + p.getPrice()));

    products.stream().forEach(p -> {
        Map> map = highlighting.get(p.getPid());
        List prod_pname = map.get("prod_pname");
        System.out.println(prod_pname == null ? p.getPname() : prod_pname.get(0) + " :: " + p.getCatalogName() + " :: " + p.getPrice());
    });

    // 4.提交事务
    client.commit();
    client.close();

    System.out.println("--- 查询成功 ---");
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/678708.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号