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,如关键字查询、过滤查询、分页、条件查询等等,本文不一一列举,有兴趣可以查阅官方文档进行了解。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
好的,我会尝试回答您的问题。 首先,要生成CloudSolrClient的增删改查代码,需要进行以下步骤: 1. 导入所需的依赖库。 在代码中需要导入solrj库,代码如下: ```java import org.apache.solr.client.solrj.impl.CloudSolrClient; import org.apache.solr.client.solrj.impl.HttpSolrClient; import org.apache.solr.client.solrj.SolrClient; import org.apache.solr.client.solrj.SolrQuery; import org.apache.solr.client.solrj.SolrServerException; import org.apache.solr.client.solrj.response.QueryResponse; import org.apache.solr.common.SolrDocumentList; import org.apache.solr.common.params.ModifiableSolrParams; import java.io.IOException; import java.util.HashMap; import java.util.Map; ``` 2. 创建CloudSolrClient对象并设置连接参数。 初始化CloudSolrClient对象需要指定Solr地址,以及ZooKeeper的地址信息。具体代码如下: ```java Map<String, String> zkHosts = new HashMap<>(); zkHosts.put("zkHosts", "localhost:2181/solr"); CloudSolrClient cloudSolrClient = new CloudSolrClient.Builder(new ArrayList<>(zkHosts.values()), Optional.empty()).build(); //设置默认的Collection名称 cloudSolrClient.setDefaultCollection("collection_name"); ``` 3. 增加文档。 添加文档到索引需要创建SolrInputDocument对象,然后使用IndexRequest操作,如下: ```java SolrInputDocument doc = new SolrInputDocument(); doc.addField("id", "doc_id"); doc.addField("title", "doc_title"); doc.addField("content", "doc_content"); UpdateRequest addRequest = new UpdateRequest(); addRequest.add(doc); cloudSolrClient.request(addRequest); cloudSolrClient.commit(); ``` 4. 更新文档。 更新需要使用UpdateRequest对象,具体代码如下: ```java SolrInputDocument doc = new SolrInputDocument(); doc.addField("id", "doc_id"); doc.addField("title", "doc_title_updated"); UpdateRequest updateRequest = new UpdateRequest(); updateRequest.add(doc); cloudSolrClient.request(updateRequest); cloudSolrClient.commit(); ``` 5. 删除文档。 删除文档需要使用deleteByQuery或者deleteById方法,具体代码如下: ```java //使用deleteByQuery方法删除文档 DeleteRequest deleteRequest = new DeleteRequest(); deleteRequest.deleteById("doc_id"); ``` ```java //使用deleteById方法删除文档 DeleteRequest deleteRequest = new DeleteRequest(); deleteRequest.deleteByQuery("id:doc_id"); ``` 6. 查询文档。 可以使用SolrQuery对象进行查询,具体代码如下: ```java SolrQuery query = new SolrQuery(); query.setQuery("id:doc_id"); QueryResponse response = cloudSolrClient.query(query); SolrDocumentList results = response.getResults(); ``` 以上是生成CloudSolrClient的增删改查代码的主要步骤。但具体实现方法还需要根据实际需求进行改进。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

幻灵萱萱

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值