solr的使用(三)

目录

一、定义接口方法

二、实现接口方法

(1)org.springframework.data.solr.core.query.Criteria:

(2)org.springframework.data.solr.core.query.SimpleQuery:

(3)org.springframework.data.solr.core.SolrTemplate中的SolrTemplate的使用:

三、继承自定义的方法库

四、调用方法


想必看过教程(二)的小伙伴们,已经学会solr基础的CRUD操作了。那么接下来我会介绍使用JPA是实现自定义方法库,实现自定义动态参数,和自定义方法。

一、定义接口方法

例子:

public interface CustomTodoDocumentRepository {
    //分页 + 动态多条件查询
    Page<ChatMessage> pagingByConditions(long startTime,
                                         long endTime,
                                         String messageContent,
                                         String chatId,
                                         int messageContentType,
                                         int chatType,
                                         Pageable pageable);

    //动态多条件查询
    Page<ChatMessage> selectByConditions(long startTime,
                                         long endTime,
                                         String messageContent,
                                         String chatId,
                                         int messageContentType,
                                         int chatType);
}

二、实现接口方法

  • 各个包中对应类解释和应用:

(1)org.springframework.data.solr.core.query.Criteria:

作用:

自定义方法传入的参数,可以做到一个动态拼接的效果

如何使用:

Criteria conditions = new Criteria("solr中的字段名").is(要做匹配的值);

其中is为是的意思,指全值匹配,如果你配置了ik分词器,而且本字段设置为了ik类型,那么这个is也将可以进行分词搜索,根据划分的索引查找。

除了is还有另外一些不同的匹配方法:

小于:lessThanEqual

大于:greaterThanEqual

在什么区间:between

除了这些常用的其实还有很多匹配方法的,这些比较常用,如果有兴趣的小伙伴还需要别的匹配方法的话,可以取官网查看相关的api,这里就不都列出来了。

(2)org.springframework.data.solr.core.query.SimpleQuery:

作用:

自定义查询需要的条件,和分页条件

如何使用:

SimpleQuery search = new SimpleQuery(conditions, pageable);

传入设计好的参数条件,和分页条件。

(3)org.springframework.data.solr.core.SolrTemplate中的SolrTemplate的使用:

作用:

调用CRUD方法

如何使用:

比如查询方法如下,需传入自定义查询SimpleQuery和java中实体的映射类

 Page<ChatMessage> results = solrTemplate.query("solr的document名字", search, ChatMessage.class);

例子:

public class TodoDocumentRepositoryImpl implements CustomTodoDocumentRepository {
    @Resource
    private SolrTemplate solrTemplate;

    /**
     * 动态多条件查询
     * */
    @Override
    public Page<ChatMessage> selectByConditions(long startTime,
                                                long endTime,
                                                String messageContent,
                                                String chatId,
                                                int messageContentType,
                                                int chatType) {
        Criteria conditions = createSearchConditions(startTime, endTime, messageContent, chatId, messageContentType, chatType);
        SimpleQuery search = new SimpleQuery(conditions);
        Page<ChatMessage> chatMessageList = solrTemplate.query("enterprise_weixin", search, ChatMessage.class);
        return chatMessageList;
    }

    /*
     * 分页 + 动态多条件查询
     * */
    @Override
    public Page<ChatMessage> pagingByConditions(long startTime,
                                                 long endTime,
                                                 String messageContent,
                                                 String chatId,
                                                 int messageContentType,
                                                 int chatType,
                                                 Pageable pageable) {
        Criteria conditions = createSearchConditions(startTime, endTime, messageContent, chatId, messageContentType, chatType);
        SimpleQuery search = new SimpleQuery(conditions, pageable);
//        Page<ChatMessage> results = solrTemplate.queryForPage("enterprise_weixin",search,ChatMessage.class);
        Page<ChatMessage> results = solrTemplate.query("enterprise_weixin", search, ChatMessage.class);
        return results;
    }


    /*
    * 自定义动态查询条件
    * */
    private Criteria createSearchConditions(long startTime,
                                            long endTime,
                                            String messageContent,
                                            String chatId,
                                            int messageContentType,
                                            int chatType) {
        Criteria conditions = null;
        //判断聊天id不为空,空则无法定义条件
        if (chatId != null) {
            conditions = new Criteria("chatId").is(chatId);
        } else {
            return null;
        }
        if (messageContent != null) {
            conditions = conditions.and(new Criteria("messageContent").is(messageContent));
        }
        if (messageContentType != -1) {
            conditions = conditions.and(new Criteria("messageContentType").is(messageContentType));
        }
        if (chatType != -1) {
            conditions = conditions.and(new Criteria("chatType").is(chatType));
        }
        //判断时间条件
        if (startTime == 0L && endTime != 0L) {
            //有最大时间
            conditions = conditions.and(new Criteria("messageTime").lessThanEqual(endTime));
        } else if (endTime == 0L && startTime != 0L) {
            //有最小时间
            conditions = conditions.and(new Criteria("messageTime").greaterThanEqual(startTime));
        } else if (startTime != 0L && endTime != 0L) {
            //有时间区间
            conditions = conditions.and(new Criteria("messageTime").between(startTime, endTime));
        }
        return conditions;
    }
}

三、继承自定义的方法库

@Repository
public interface TodoDocumentRepository extends CustomTodoDocumentRepository, SolrCrudRepository<ChatMessage, String> {
}

四、调用方法

最后我们就可以开心的调用相关的方法啦,想必后面就不用我示例了,只要在需要使用的地方注入

TodoDocumentRepository类,就可以使用啦。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值