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. C# 银行系统

    今天分享一个大家都爱的Money 银行系统代码  可以随心所欲的存钱取钱 //要想成功,必须马到 //建立数组 Card[] cards = ]; //卡类初始化 public void Initia ...

  2. spark安装配置(scala不是必须的,基于java虚拟机,因此scala可以不配,但是开发需要可以配)

    下载 http://spark.apache.org/downloads.html 下载2.3.1 https://blog.csdn.net/qq_15349687/article/details/ ...

  3. 微信openid

    微信openid由用户id和公众号id加密而来,同一用户相对同一公众账号的openid是不变的.

  4. uwsgi怎么启动停止

    ## 二.启动停止重启 uWSGI 通过 xxx.ini 启动后会在相同目录下生成一个 xxx.pid 的文件,里面只有一行内容是 uWSGI 的主进程的进程号. uWSGI 启动:uwsgi --i ...

  5. C#winform自定义滚动条

    1.控件 一个UserControl作为ScrollBg,一个panel作为ScrollBar 2.实现功能 (1)设置滚动条背景颜色和背景图片 (2)设置滚动条滑块的背景颜色和背景图片 (3)鼠标左 ...

  6. 工作中的Buff加成-结构化思考力:第一章:认识结构化思维及其作用

    一:引言 为了更好的说明结构思考力,我们先来做几个小测试. PS:如果你能做到,请留言,因为我要和你交好友,因为你是人才啊,可以挖一挖,挖到我的公司中. 第一个测试:请在三秒内记住下列数字.数字顺序不 ...

  7. C# TinyIOC简单用法

    先添加一个接口 namespace IContract { public interface IBase { void ShowMessage(); } } 再添加两个实现类 namespace Co ...

  8. Spring Cloud使用总结

    本文来自网易云社区,转载务必请注明出处. Spring Cloud 是spring团队推出的基于SpringBoot的分布式微服务框架,为开发者提供了在分布式系统(如配置管理.服务发现.断路器.智能路 ...

  9. javascript滚动到大于一定距离显示隐藏

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. [Maven实战-许晓斌]-[第二章]-2.4设置HTTP代理