搜索篇-elasticesearch-实现日记功能

搜索篇-elasticesearch
大家有没做过大量数据一键搜索的需求。【涉及数据同步】
怎么把数据串联起来,然后还要实现分页, 后台要做到能建模,比如这个表的name可作为查询字段,怎么做到动态加入
关系型到非关系型的数据同步
python爬虫 入库 然后数据清洗 导入到es【es字段固定的】【排序也是用guava脚本】

搜索分固定,模糊,分词查询
EsService
TransportClient

搜index
@Document (indexname)插入的时候自动建了【索引库】

@Field注解,注入字段。写入ES?
【理解====@ApiModelProperty(“人员ID”)
@Field(type = FieldType.String)
private String personnelId;】
es 在数据量很大的情况下(数十亿级别)如何提高查询效率啊?
es 的搜索引擎严重依赖于底层的 ffilesystem cache

在这里插入图片描述Elasticsearch–java操作之QueryBuilders构建搜索Query

    public PageResponse<LoginLog> list(LoginLogQuery query) {
        Integer current = query.getCurrent() != null ? query.getCurrent() : 1;
        Integer size = query.getSize() != null ? query.getSize() : 1;
        Pageable pageable = new PageRequest(current - 1, size);
        //Elasticsearch--java操作之QueryBuilders构建搜索Query
        BoolQueryBuilder rootQueryBuilder = boolQuery();
        if(StringUtils.isNotBlank(query.getName())){
            rootQueryBuilder.filter(QueryBuilders.matchQuery("name", query.getName()));
        }
        if(StringUtils.isNotBlank(query.getPoliceCode())){
            rootQueryBuilder.filter(QueryBuilders.matchQuery("policeCode", query.getPoliceCode()));
        }
        if(StringUtils.isNotBlank(query.getUserName())){
            rootQueryBuilder.filter(QueryBuilders.matchQuery("userName", query.getUserName()));
        }
        if(StringUtils.isNotBlank(query.getOrgName())){
            rootQueryBuilder.filter(QueryBuilders.matchQuery("orgName", query.getOrgName()));
        }
        if(query.getStartTime() != null){
            rootQueryBuilder.filter(QueryBuilders.rangeQuery("loginTime").gte(DateUtil.parse(query.getStartTime(), DateUtil.YYYYMMDDHHMMSS).getTime()));
        }
        if(query.getEndTime() != null){
            rootQueryBuilder.filter(QueryBuilders.rangeQuery("loginTime").lte(DateUtil.parse(query.getEndTime(), DateUtil.YYYYMMDDHHMMSS).getTime()));
        }
        //排序方式==也是es库
        FieldSortBuilder sortBuilder  = SortBuilders.fieldSort("loginTime").order(SortOrder.DESC);
        SearchQuery searchQuery =
                new NativeSearchQueryBuilder().withPageable(pageable).withQuery(rootQueryBuilder).withSort(sortBuilder).withTypes(TYPE).withIndices(INDEX).build();
        Page<LoginLog> record = elasticsearchTemplate.queryForPage(searchQuery, LoginLog.class);

        PageResponse<LoginLog> pageResponse = new PageResponse<>();
        pageResponse.setTotal(record.getTotalElements());
        pageResponse.setContent(record.getContent());
        return pageResponse;
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值