org.elasticsearch.script.Script使用
public Map<String, Object> builderMapPackage(PageBean pageBean, QueryBuilder queryBuilder, String esIndex, String esType,
Map<String, String> sortsMap, Map<String, String> scriptsMap, Map<String, Map<String, Object>> scriptsParams){
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.query(queryBuilder);

    // painless脚本排序
    if (CommonFuctions.isNotEmptyMap(scriptsMap)) {
        // 必发sort
        if(scriptsMap.containsKey("taskList")){
            Script sc = new Script(ScriptType.INLINE, Script.DEFAULT_SCRIPT_LANG, scriptsMap.get("taskList"),
                    scriptsParams.get("taskList"));
            searchSourceBuilder.sort(new ScriptSortBuilder(sc, ScriptSortBuilder.ScriptSortType.NUMBER).order(SortOrder.ASC));
        }

        // 置顶过期时间sort
        if (scriptsMap.containsKey("topExpiredDate")) {
            Script sc = new Script(ScriptType.INLINE, Script.DEFAULT_SCRIPT_LANG, scriptsMap.get("topExpiredDate"),
                    scriptsParams.get("topExpiredDate"));
            searchSourceBuilder.sort(new ScriptSortBuilder(sc, ScriptSortBuilder.ScriptSortType.NUMBER).order(SortOrder.ASC));
        }
    }

    // 普通排序
    if(CommonFuctions.isNotEmptyMap(sortsMap)){
        for(String sort : sortsMap.keySet()){
            if(sortsMap.get(sort).equals("asc")){
                searchSourceBuilder.sort(sort, SortOrder.ASC);
            }else{
                searchSourceBuilder.sort(sort, SortOrder.DESC);
            }
        }
    }

    // 分页
    if(pageBean != null){
        searchSourceBuilder.from(pageBean.getStartIndex());
        searchSourceBuilder.size(pageBean.getPageSize());
    }

    // 创建查询索引,参数esIndex表示要查询的索引库为esIndex
    Map<String, Object> builderMap = new HashMap<>();
    builderMap.put("builderString", searchSourceBuilder.toString());
    builderMap.put("esIndex", esIndex);
    builderMap.put("esType", esType);
    return builderMap;
}

@Override
public QueryBuilder productBuilder(EsListDto esListDto, String searchKey, String dateString, String regex, boolean isNewRedPackage){
Long currentTime = System.currentTimeMillis();
BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();
//用于关键字查询
if(null != searchKey){
BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
//模糊匹配,主要用于字母的相关查询
boolQuery.should(QueryBuilders.wildcardQuery("productName","" + searchKey + ""));
boolQuery.should(QueryBuilders.wildcardQuery("sellingPoints","" + searchKey + ""));
boolQuery.should(QueryBuilders.wildcardQuery("productItem","" + searchKey + ""));
queryBuilder.must(boolQuery);
}
//用于产品名称查询
if(null != esListDto.getProductList()){
BoolQueryBuilder contentBoolQuery = QueryBuilders.boolQuery();
esListDto.getProductList().forEach(i -> contentBoolQuery.should(QueryBuilders.wildcardQuery("productName","" + i + "")));
queryBuilder.must(contentBoolQuery);
}
//用于内容标签查询
if(null != esListDto.getContentList()){
BoolQueryBuilder contentBoolQuery = QueryBuilders.boolQuery();
esListDto.getContentList().forEach(i -> contentBoolQuery.should(QueryBuilders.wildcardQuery("productItem","" + i + "")));
queryBuilder.must(contentBoolQuery);
}
queryBuilder.must(QueryBuilders.boolQuery().should(QueryBuilders.boolQuery().mustNot(QueryBuilders.existsQuery("isShow")))
.should(QueryBuilders.termQuery("isShow", "Y")))
.must(QueryBuilders.boolQuery().should(QueryBuilders.boolQuery().mustNot(QueryBuilders.existsQuery("status")))
.should(QueryBuilders.termQuery("status", "2")).should(QueryBuilders.termQuery("status", "4")))
.must(QueryBuilders.boolQuery().should(QueryBuilders.boolQuery().mustNot(QueryBuilders.existsQuery("endDate"))).should(QueryBuilders.rangeQuery("endDate").gt(dateString)))
.must(QueryBuilders.boolQuery().should(QueryBuilders.boolQuery().mustNot(QueryBuilders.existsQuery("startDate"))).should(QueryBuilders.rangeQuery("startDate").lt(dateString)))
//存在分批上架功能,需要判断codeList和whiteList,不存在分批上架功能,需要判断whiteList,publishBranchList,thirdRegionCodes
.must(QueryBuilders.boolQuery()
.should(QueryBuilders.boolQuery().must(QueryBuilders.nestedQuery("codeList", QueryBuilders.boolQuery().must(QueryBuilders.regexpQuery("codeList.branch", regex))
.must(QueryBuilders.boolQuery()
.should(QueryBuilders.boolQuery().mustNot(QueryBuilders.existsQuery("codeList.endDate")))
.should(QueryBuilders.rangeQuery("codeList.endDate").gt(currentTime)))
.must(QueryBuilders.rangeQuery("codeList.startDate").lt(currentTime)), ScoreMode.None))
.must(QueryBuilders.boolQuery()
.should(QueryBuilders.boolQuery().mustNot(QueryBuilders.existsQuery("whiteList")))
.should(QueryBuilders.matchQuery("whiteList", esListDto.getAgentNo()))))
.should(QueryBuilders.boolQuery().mustNot(QueryBuilders.nestedQuery("codeList", QueryBuilders.existsQuery("codeList.branch"), ScoreMode.None)).must(QueryBuilders.boolQuery()
.should(QueryBuilders.matchQuery("whiteList", esListDto.getAgentNo()))
.should(QueryBuilders.boolQuery()
.mustNot(QueryBuilders.existsQuery("whiteList"))
.must(QueryBuilders.boolQuery()
.should(QueryBuilders.regexpQuery("publishBranchList", regex))
.should(QueryBuilders.regexpQuery("thirdRegionCodes", regexForEs("",esListDto.getRegionCode())))))))
)
;
//需要过滤老版本中的红包产品
if(!isNewRedPackage){
queryBuilder.mustNot(QueryBuilders.termQuery("productType", "ZX"));
}
return queryBuilder;
}

org.elasticsearch.script.Script使用的更多相关文章

  1. Elasticsearch Painless script编程

    我们之前看见了在Elasticsearch里的ingest node里,我们可以通过以下processor的处理帮我们处理我们的一些数据.它们的功能是非常具体而明确的.那么在Elasticsearch ...

  2. xss实例-输出在<script></script>之间的情况

    1. 我们找到这么一个点,也是输入和输出都未过滤的一个点.相比教程第一例,其特殊之处在于,是输出在了 <script>[输出]</script>之间. http://activ ...

  3. 哪种写法更好?<script></script> vs/or <script type=”text/javasript”></script>

    一直很奇怪 哪种写法更好<script type=“text/javascript”>…</script> or <script>…</script>? ...

  4. <script>, <script async>, <script defer> 三种标签的区别

    <script>, <script async>, <script defer> 三种标签的区别 <script>标签 阻塞html parsing 脚 ...

  5. Vue <script></script>区域使用filter过滤器

    Vue中过滤器(filter)的功能高度提取,便于使用,前端小伙伴们使用的频率很高.但大多数都是在模板区域来使用. 如果要在脚本区域, 也就是来使用已经定义好过滤器功能,该如何去做呢? 难道需要在ut ...

  6. elasticSearch script api

    Package org.elasticsearch.script Support for running user provided scripts (in the request, in clust ...

  7. 页面中多个script块之间的关系

     一:函数声明与函数定义表达式在函数调用间的区别 <script type="text/javascript"> doA(); var doA = function(a ...

  8. javaScript中的小细节-script标签中的预解析

    首先介绍预解析,虽然预解析字面意思很好理解,但是却是出坑出的最多的地方,也是bug经常会有的地方,利用好预解析的特性可以解决很多问题,并且提高代码的质量及数量,浏览器在解析代码前会把变量的声明和函数( ...

  9. JS中script词法分析

    核心:JS中的script是分段执行的. <script> var i = 10; </script> <script> alert(i); </script ...

随机推荐

  1. [GO]方法的重写

    package main import "fmt" type Person struct { name string sex byte age int } func (tmp Pe ...

  2. ceph中pool的管理

    1.创建pool 创建ceph pool的命令如下,它的参数包括pool名字.PG和PGP的数量. 若少于5个OSD, 设置pg_num为128. 5~10个OSD,设置pg_num为512. 10~ ...

  3. ubuntu 16.04快速建lvm

    1.准备2块虚拟硬盘 在执行下面之前先安装:lvm和mkfs.xfs apt install lvm2 -y apt install xfsprogs dd if=/dev/zero of=ceph- ...

  4. QT学习之窗口部件

    对话框--QDialog 模态对话框与非模态对话框 模态对话框:就是相当于没关闭它之前,不能再和该应用程序的其他窗口进行交互(比如新建项目时弹出的对话框) 非模态对话框:可以与它交互,也可以与该程序中 ...

  5. Java书籍经典Top10

    1)Java Language Specification, Third Edition (by James Gosling) 本书由Java技术的发明者编写,是Java TM编程语言的权威性技术指南 ...

  6. centos 学习总结

    我用的是6.4 添加中文输入法 .su root .yum install "@Chinese Support" .exit .回到桌面,system->preference ...

  7. 【微服务架构】SpringCloud之Eureka(注册中心集群篇)(三)

    上一篇讲解了spring注册中心(eureka),但是存在一个单点故障的问题,一个注册中心远远无法满足实际的生产环境,那么我们需要多个注册中心进行集群,达到真正的高可用.今天我们实战来搭建一个Eure ...

  8. memcached整理の内存管理及删除机制

    内存的碎片化 如果用C语言直接malloc,free来向操作系统申请和释放内存时,在不断申请和释放的过程中,形成了一些很小的内存片段,无法再利用.这种空闲但无法利用内存的现象称为内存的碎片化. sla ...

  9. RobotFramework关键字返回参数

    业务关键字[登录]返回参数 调用时直接把return的参数值写在业务关键字的最前面,就可以使用关键字的返回值了

  10. 获取服务端https证书

    最近开发一个需求,涉及获取服务端https证书.一般进行https调用我们都不太关心底层细节,直接使用WebClient或者HttpWebRequest来发送请求,这两种方法都无法获取证书信息,需要用 ...