Solr【二】:Springboot整合Solr完成简单增删改查

1.前言

本文是在上一章Solr【一】:初识solr的基础上进行的,主要记录springboot整合solr完成简单增删改查的操作。

2.solrj和spring-data-solr

2.1 solrj

solrJ是solr官方推出的客户端工具包,将solrj的jar包放到我们项目中,我们调用solrj中的api来远程给solr服务器发送命令,solr服务器就可以完成对索引库的操作(添加修改删除查询).

2.2 spring-data-solr

spring-data-solr就是为了方便Solr的开发所研制的一个框架,其底层是对SolrJ(官方API)的封装

3. spring-data-solr方式整合solr

3.1 pom文件

<!-- solr -->
    <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-data-solr</artifactId>
       <version>2.1.8.RELEASE</version>
    </dependency>

3.2 application.yml

spring:
  data:
    solr:
      host: http://localhost:8983/solr

3.3 实体类

这个实体类就是solr服务器的配置文件配置的字段。@Field注解是映射作用,Java实体类与solr索引的映射。

@Data
public class Demo {

    @Field
    private String fEntityGuid;
    private String fEntityName;
    private String  fLongitude;
    private String fLatitude;
    private String fIsNew;
}

3.4 注入SolrClient对象

用法示例如下

@Autowired
 SolrClient solrClient;

3.5 代码示例

3.5.1 查询全部索引

@RequestMapping("queryAll")
public SolrDocumentList queryAll() throws IOException, SolrServerException {
    SolrQuery query = new SolrQuery();
    query.setQuery("*:*");
    QueryResponse queryResponse =  solrClient.query("coreDemo",query);
    // 取查询结果
    SolrDocumentList documentList = queryResponse.getResults();
    return  documentList;
}

3.5.2 查询单个索引

  @RequestMapping("query")
    public SolrDocumentList query()  throws IOException, SolrServerException{
        SolrQuery query = new SolrQuery();
        query.setQuery("fEntityName:张一");
        QueryResponse queryResponse =  solrClient.query("coreDemo",query);
        // 取查询结果
        SolrDocumentList documentList = queryResponse.getResults();
        return  documentList;
    }

3.5.3 增加或修改索引

 @RequestMapping("addOrUpdate")
    public String addOrUpdate() {
        try {
            SolrInputDocument doc = new SolrInputDocument();
            doc.setField("fEntityGuid", "4");
            doc.setField("fEntityName", "王五");
            doc.setField("fLongitude", "112.32");
            doc.setField("fLatitude", "23.22");
            doc.setField("fIsNew", "1");
            //如果spring.data.solr.host里面配置到demo_core,那么这里就不需要传demo_core
            solrClient.add("coreDemo", doc);
            solrClient.commit("coreDemo");
            return "新增/更新成功!";
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

3.5.4 根据id删除索引

 @RequestMapping("delById/{id}")
    public  int  delById(@PathVariable("id") String id) throws IOException, SolrServerException {
        //根据id删除信息
        UpdateResponse updateResponse = solrClient.deleteById("coreDemo",id);
        solrClient.commit("coreDemo");
        return updateResponse.getStatus();
    }

3.5.5 高亮查询

 @RequestMapping("highlight")
    public  void queryFromSolr() throws IOException, SolrServerException {
        SolrQuery solrQuery  = new SolrQuery();
        solrQuery.add("q","fEntityName:张一");

        //设置查询的条数
        solrQuery.setRows(50);
        //设置查询的开始
        solrQuery.setStart(0);
        //设置高亮
        solrQuery.setHighlight(true);
        //设置高亮的字段
        solrQuery.addHighlightField("fEntityName");
        //设置高亮的样式
        solrQuery.setHighlightSimplePre("<font color='red'>");
        solrQuery.setHighlightSimplePost("</font>");
        System.out.println(solrQuery);
        QueryResponse response = solrClient.query("coreDemo",solrQuery);
        //返回高亮显示结果
        Map<String, Map<String, List<String>>> highlighting = response.getHighlighting();
        //response.getResults();查询返回的结果
        SolrDocumentList documentList = response.getResults();
        for (SolrDocument solrDocument : documentList) {
            System.out.println("solrDocument==============" +solrDocument);
        }
        System.out.println("highlighting==============" + highlighting);
    }

上述内容即本文全部内容,SolrClient还提供了很多可以操作solr的api,如关键字查询、过滤查询、分页、条件查询等等,本文不一一列举,有兴趣可以查阅官方文档进行了解。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值