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. Gym 101190H Hard Refactoring (模拟坑题)

    题意:给定 n 个区间,让你进行合并,问你最后的区间是,如果是空集,输出 false 如果区间是是 [-32768,32767] ,则是true. 析:进行区间合并,要注意,如果是 x >= 0 ...

  2. jquery cookie用法

    jquery cookie用法(获取cookie值,删除cookie) cookie在jquery中有指定的cookie操作类,下面我先来介绍我们在使用cookie操作类时的一些问题,然后介绍正确的使 ...

  3. 19、Semantic-UI之图片的动画效果

      在Semantic-UI中定义了很多图片动画效果,可以直接使用. 示例:定义图片动画 <!DOCTYPE html> <html lang="en"> ...

  4. html中怎么样让div并排显示

    html中的div默认是流式显示,每个div会占用一整行 <html> <head> <meta http-equiv="Content-Type" ...

  5. windows游戏开发中一个关于Visual Studio的编译链接成功,输出窗口却显示线程已退出。无法运行项目的问题

    可能是显卡驱动程序版本太高了,退回到以前的版本就ok了. 第一次遇见这个问题可把我给整疯了!! 后来又遇到一次,参考之前的解决方法,很快就搞定了!! 可见,经验可是很重要的一个东西啊.

  6. C#面向对象:多态

    此文章转载网站:https://www.cnblogs.com/qixinbo/p/8244583.html 多态: 有多态之前必须要有继承,只有多个类同时继承了同一个类,才有多态这样的说法. 在继承 ...

  7. 聊聊 JDK 阻塞队列源码(ReentrantLock实现)

    项目中用到了一个叫做 Disruptor 的队列,今天楼主并不是要介绍 Disruptor 而是想巩固一下基础扒一下 JDK 中的阻塞队列,听到队列相信大家对其并不陌生,在我们现实生活中队列随处可见, ...

  8. System.Data.OracleClient.dll方式操作oracle数据库

    System.Data.OracleClient.dll方式操作oracle数据库 一.查询语句: using (OracleConnection conn = new OracleConnectio ...

  9. Linux 开启路由转发功能

    想让一台Red Hat Enterprise Linux 7开通iptables的nat转发功能 A服务器:192.168.30.20/24 B服务器:192.168.30.1/24,eth0; 19 ...

  10. CAS客户端整合(一) Discuz!

    有好几个系统需要接入CAS,所以登录模块统统需要重构 版本 CAS服务端是Java的 Cas-server-4.0 CAS的php客户端 是 phpCAS-1.2.0 论坛版本是 Discuz!X3. ...