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

solr的使用(二)

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

solr的使用(二)

        

目录

一、配置环境连接

二、CRUD操作

映射solr中配置的字段

Create增:

Retrieve查:

Update改:

Delete删除:


        在前面的学习中,我们已经配置好的我们要使用的字段了,那么我们可以开心的在idea 中写CRUD操作了。下面进行idea中如何操作solr。

        本文先介绍solr比较简单易上手的一个包:org.springframework.data.solr.repository

        其中SolrCrudRepository类已经封装了CRUD了,很方便。

        在教程(三)中会介绍相对比较复杂的自定义方法库,本篇章为solr的入门,实现较为简单的CRUD功能。

一、配置环境连接

        maven依赖配置:

        
            org.springframework.boot
            spring-boot-starter-data-solr
            2.1.0.RELEASE
            true
        

        yml文件配置:

spring:
  data:
    solr:
      host: solr地址

二、CRUD操作
  • 映射solr中配置的字段

需要映射solr中的域名到java中的实体,然后写个新的类继承SolrCrudRepository就可以了。

步骤一:实体类 @Solrdocument(collection = "enterprise_weixin") 定义其document的名字

其中的成员变量 @Field 匹配id 、@Field("chat_fromUserId") 匹配其他域名

例:

@AllArgsConstructor
@NoArgsConstructor
@Builder
@Data
@Solrdocument(collection = "你在solr配置的document名称")
public class TbItem implements Serializable {
    private static final long serialVersionUID = 1L;

    @Field
    private String id;

    @Field("chat_fromUserId")
    private String fromUserId;

    @Field("chat_fromUserName")
    private String fromUserName;

    @Field("chat_fromUserAvatar")
    private String fromUserAvatar;

    @Field("chat_toUserId")
    private String toUserId;

    @Field("chat_toUserName")
    private String toUserName;

    @Field("chat_messageContent")
    private String messageContent;

    @Field("chat_messageTime")
    private Long messageTime;

    @Field("chat_chatId")
    private String chatId;

}

步骤二:新建类继承SolrCrudRepository

继承了此类,就相当于你spring中的mapper层了,可以定义为@Repository

继承了此类,可以调用其已有的方法,也可以自定义方法,下面给出操作。

public interface SolrRepository extends SolrCrudRepository {}

其中T为idea中对应数据库的实体,ID为主键定义的数据类型。

例:数据库对应的实体为TbItem ,且主键类型为String,则为:

public interface SolrRepository extends SolrCrudRepository {}

步骤三:在service层注入此类,调用此继承类的方法,本次用了Junit测试,直接在test中引入了

下面现在开始CURD操作:

  • Create增:

sava(父类自带的方法直接就可以使用),传入需要保存的实体类信息

TbItem item = TbItem.builder().fromUserId("456").toUserId("789").messageContent("今天天气不错呀").id(CreateID.getUid()).build();
        System.out.println(item);
        solrDemoRepository.save(item);
  • Retrieve查:

需要查询分页传入Pageable,需要排序传入Sort。

//参数1:排序方式  参数2:排序的字段
Sort sort=new Sort(Sort.Direction.DESC,"chat_messageTime");
//参数1:页码  参数2:每页的数据量
Pageable pageable=new PageRequest(pageNum,pageSize);
//参数1:页码  参数2:每页的数据量  参数3:排序方式  参数4:排序的字段
Pageable pageable = new PageRequest(pageNum, pageSize, Sort.Direction.DESC, "chat_messageTime");

(1)继承的类中定义方法:

<1>从父类继承过来的方法不用定义,可以直接使用

<2>可以根据 findBy + 实体类中的字段名(支持多字段联查只要后面用And连接) 定义方法 并且传参就可以调用:

public List findByFromUserId(String fromUserId);
public Page findByMessageContent(String messageContent, Pageable pageable);

<3>自定义方法 @Query

field参数数据

filters 定义传入的参数和field匹配

@Query(value = "*:*", fields = {"chat_messageTime", "chat_messageContent", "chat_chatId", "chat_messageContentType", "chat_chatType"},
        filters = {"chat_messageTime:[?0 TO ?1]", "chat_messageContent:?2", "chat_chatId:?3", "chat_messageContentType:?4", "chat_chatType:?5"})
public Page pagingWithConditions(long startTime,
                                              long endTime,
                                              String messageContent,
                                              String chatId,
                                              int messageContentType,
                                              int chatType,
                                              Pageable pageable);
@Query(value = "*:*", fields = {"chat_messageTime", "chat_messageContent", "chat_chatId", "chat_messageContentType", "chat_chatType"},
        filters = {"chat_messageTime:[?0 TO ?1]", "chat_messageContent:?2", "chat_chatId:?3", "chat_messageContentType:?4", "chat_chatType:?5"})
public List selectAllWithConditions(long startTime,
                                                 long endTime,
                                                 String messageContent,
                                                 String chatId,
                                                 int messageContentType,
                                                 int chatType,
                                                 Sort sort);
  • Update改:

先进行根据id的查询,把数据查询出来后,如果存在,就用返回的数据修改相关的参数后,用sava保存

Optional chatMessages = solrRepository.findById(preMessageId);
//判断查询的对象存不存在
if (chatMessages.isPresent()) {
    //存在则更新
    ChatMessage chatMessage = chatMessages.get();
    chatMessage.setId(preMessageId);
    solrRepository.save(chatMessage);
}
  • Delete删除:

public void deleteById();

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/285460.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

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

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