工作中使用es的报错问题记录及常用语法记录,仍在整理中,由于es每次版本更新api变化都会很大,所以这里的整理对于很多api都不适用,这里使用的es版本为6.8.4,使用的spring-data-elasticsearch为3.2.3.RELEASE,elasticsearch-rest-client为6.4.3

单条件查询

     //创建查询构建器NativeSearchQueryBuilder queryBuilder = new NativeSearchQueryBuilder();//分页queryBuilder.withPageable(PageRequest.of(Integer.parseInt(param.getPageNoStr())-1, Integer.parseInt(param.getPageSizeStr())));if (!StringUtils.isEmpty(param.getUserName())){queryBuilder.withQuery(QueryBuilders.matchQuery("username",param.getUserName()));}if (!StringUtils.isEmpty(param.getUserCode())){queryBuilder.withQuery(QueryBuilders.matchQuery("usercode",param.getUserCode()));}if (!StringUtils.isEmpty(param.getDeptId())){queryBuilder.withQuery(QueryBuilders.termQuery("deptcode",param.getDeptId()));}if (!StringUtils.isEmpty(param.getUsertype())){queryBuilder.withQuery(QueryBuilders.termQuery("usertype",param.getUsertype()));}if (!StringUtils.isEmpty(param.getAccesscategory())){queryBuilder.withQuery(QueryBuilders.termQuery("access_category",param.getAccesscategory()));}if (!StringUtils.isEmpty(param.getLoginbeginDate())&&!StringUtils.isEmpty(param.getLoginendDate())){queryBuilder.withQuery(QueryBuilders.rangeQuery("logintime").from(param.getLoginbeginDate()).to(param.getLoginendDate()));}else if (!StringUtils.isEmpty(param.getLoginbeginDate())){queryBuilder.withQuery(QueryBuilders.rangeQuery("logintime").from(param.getLoginbeginDate()));}else if (!StringUtils.isEmpty(param.getLoginendDate())){queryBuilder.withQuery(QueryBuilders.rangeQuery("logintime").to(param.getLoginendDate()));}AggregatedPage<SysUserloginlogDto> result = template.queryForPage(queryBuilder.build(), SysUserloginlogDto.class);

批量存入实体类不保留空字段:

Map param = new HashMap();
param.put("startrow", pageNo*pageSize);
param.put("endrow", (pageNo+1)*pageSize);
final List<SysUserloginlog> SysUserloginloglist = sysUserLoginLogDao.listSysUserLoginLog(param);if (!CollectionUtils.isEmpty(SysUserloginloglist)) {BulkRequest bulkRequest = new BulkRequest();for (SysUserloginlog sysUserloginlog : SysUserloginloglist) {// sysUserloginlog.getId() 是数据库中的主键,更改成ES的_idbulkRequest.add(new IndexRequest(SYS_USER_LOGIN_LOG_ES_INDEX).id(sysUserloginlog.getId().toString()).source(JSONObject.toJSONString(sysUserloginlog), XContentType.JSON).timeout(TimeValue.timeValueSeconds(500)));}try {final BulkResponse bulk = restHighLevelClient.bulk(bulkRequest, RequestOptions.DEFAULT);//System.out.println(countTotal.addAndGet(bulk.getItems().length));} catch (Exception e) {e.printStackTrace();}
}

批量存入实体类保留空字段:

Map param = new HashMap();
param.put("startrow", pageNo*pageSize);
param.put("endrow", (pageNo+1)*pageSize);
final List<SysUserloginlog> SysUserloginloglist = sysUserLoginLogDao.listSysUserLoginLog(param);if (!CollectionUtils.isEmpty(SysUserloginloglist)) {BulkRequest bulkRequest = new BulkRequest();for (SysUserloginlog sysUserloginlog : SysUserloginloglist) {// sysUserloginlog.getId() 是数据库中的主键,更改成ES的_idSysUserloginlogDto sysUserloginlogDto = new SysUserloginlogDto();BeanUtils.copyProperties(sysUserloginlog, sysUserloginlogDto);String dataString  = JSON.toJSONString(sysUserloginlogDto, SerializerFeature.WriteMapNullValue);JSONObject data = JSON.parseObject(dataString);bulkRequest.add(new IndexRequest(SYS_USER_LOGIN_LOG_ES_INDEX).type(SYS_USER_LOGIN_LOG_ES_TYPE).id(sysUserloginlog.getId().toString()).source(data).timeout(TimeValue.timeValueSeconds(500)));}try {final BulkResponse bulk = restHighLevelClient.bulk(bulkRequest, RequestOptions.DEFAULT);//System.out.println(countTotal.addAndGet(bulk.getItems().length));} catch (Exception e) {e.printStackTrace();}
}

分词查询(先对name进行分词,拿分词去分别匹配对应的结果集,加结果集叠加返回):

QueryBuilders.matchQuery(String name,String Value);

精确查询:

QueryBuilders.termQuery(String name, String value);

模糊查询:

QueryBuilders.wildcardQuery(String name, String query);

范围查询:

QueryBuilders.rangeQuery(String name).from(开始).to(结束);

聚合查询:

//根据usercode进行分组统计,统计出的列别名叫sum
//TermsAggregationBuilder termsBuilder = AggregationBuilders.terms("sum").field("usercode");
/*String index="sysuserloginlog";
String type="sysuserloginlog";
SearchResponse searchResponse = client.prepareSearch(index).setTypes(type).setScroll(TimeValue.timeValueSeconds(8)).setQuery(QueryBuilders.matchAllQuery())//.addAggregation(termsBuilder).execute().actionGet();*/
//得到这个分组的数据集合
//Terms terms = searchResponse.getAggregations().get("sum");
//List<SysUserloginlogDto> lists = new ArrayList<>();
/*for(int i=0;i<terms.getBuckets().size();i++){//statisticsString id =terms.getBuckets().get(i).getKey().toString();//idLong sum =terms.getBuckets().get(i).getDocCount();//数量System.out.println("=="+terms.getBuckets().get(i).getDocCount()+"------"+terms.getBuckets().get(i).getKey());
}*//*List<SysUserloginlog> list = new ArrayList<>();
SearchHit[] result = searchResponse.getHits().getHits();
for (SearchHit hit: result) {SysUserloginlog sysUserloginlog = JSON.parseObject(JSON.toJSONString(hit.getSourceAsMap()), SysUserloginlog.class);list.add(sysUserloginlog);
}*/

根据id查询,没有routing的情况:

GetRequest request = new GetRequest("com_performancenotice_stk_basicinfo_com_industry_cnt_industry", "performancenotice");
ActionFuture<GetResponse> getResponseActionFuture = client.get(request);
GetResponse getResponse = getResponseActionFuture.actionGet();
Map<String, Object> sourceAsMap = getResponse.getSourceAsMap();   //将获取到的文档转成Map

根据id查询,有routing的情况,注意,有routing必须指定routing,否则获取不到:

GetRequest request = new GetRequest("com_performancenotice_stk_basicinfo_com_industry_cnt_industry", "performancenotice", "101638200468063").routing("2293951126");
ActionFuture<GetResponse> getResponseActionFuture = client.get(request);
GetResponse getResponse = getResponseActionFuture.actionGet();
Map<String, Object> sourceAsMap = getResponse.getSourceAsMap();

关于ElasticSearch的聚类时出现fielddata=true问题

  • 完整报错:
Set fielddata=true on [performancenotice.PUBDATE] in order to load fielddata in memory by uninverting the inverted index. Note that this can however use significant memory. Alternatively use a keyword field instead
  • 代码:
.addSort("performancenotice.PUBDATE", SortOrder.DESC)//排序
  • 原因:
在ElasticSearch中默认fielddata默认是false的,因为开启Text的fielddata后对内存的占用很高
  • 解决方案:关于ElasticSearch的聚类时出现fielddata=true问题

QueryShardException:

  • 完整报错:
QueryShardException[Failed to parse query ['query': {'has_parent' : { 'parent_type' : 'performancenotice', 'query' : { 'match' : { 'stk_basicinfo.SECUABBR' : 'ST' } } } }]]; nested: ParseException[Cannot parse ''query': {'has_parent' : { 'parent_type' : 'performancenotice', 'query' : { 'match' : { 'stk_basicinfo.SECUABBR' : 'ST' } } } }': Encountered " <RANGE_GOOP> ": "" at line 1, column 23
  • 代码:
QueryStringQueryBuilder queryBuilder = QueryBuilders.queryStringQuery("'query': {'has_parent' : { 'parent_type' : " +"'performancenotice', 'query' : { 'match' : { 'stk_basicinfo.SECUABBR' : 'ST' } } } }");
  • 原因:
查询字符串中包含有转义字符无法解析导致报错
  • 解决方案:ES搜索特殊字符异常

[ES笔记]持续更新中相关推荐

  1. typescript-----javascript的超集,typescript学习笔记持续更新中......

    Typescript,冲! Typescript 不是一门全新的语言,Typescript是 JavaScript 的超集,它对 JavaScript进行了一些规范和补充.使代码更加严谨. 一个特别好 ...

  2. SpringCloud学习笔记,课程源自黑马程序员,笔记持续更新中...

    @SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式: 学习内容 1.服务拆分-服务远程调用: 2.搭建eureka服务: 2.1.eureka服务注册-client 2 ...

  3. JS逆向学习笔记 - 持续更新中

    JS逆向学习笔记 寻找深圳爬虫工作,微信:cjh-18888 文章目录 JS逆向学习笔记 一. JS Hook 1. JS HOOK 原理和作用 原理:替换原来的方法. (好像写了句废话) 作用: 可 ...

  4. 专升本 计算机 公共课学习笔记(持续更新中...)

    计算机公共课学习笔记 第一章 计算机基础知识(30分) 1.计算机概述 计算机(Computer)的起源与发展 计算机(Computer)也称"电脑",是一种具有计算功能.记忆功能 ...

  5. Python学习小甲鱼视频做的笔记(持续更新中)

    Python BIF :Built-in functions(内建函数) Python与大多数其他计算机语言的做法稍有不同,他并不是把值存储在变量中,而更像是把名字贴在值的上边. 在使用变量之前,必须 ...

  6. Docker快速入门学习笔记-持续更新中

    Docker安装 #1.卸载旧的版本 yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker ...

  7. 渗透测试笔记 -------------持续更新中~

    文章目录 渗透测试 1.Windows基础 1.1 渗透测试介绍 1.2 渗透测试的特点 1.3 渗透测试流程 1.4 Windows网站篇 http协议 http头讲解 静态网站 动态网站 1.5 ...

  8. Java学习笔记(持续更新中)

    文章目录 项目实战 mall项目(SpringBoot项目) 1. 添加Swagger-UI配置,修改MyBatis Generator注释的生成规则 2. redis基础配置 3. SpringSe ...

  9. 计算机组成原理笔记(持续更新中!)

    (标三角号的相比之下不是非常重要) 文章目录 1 导论 ▲1.1 计算机的发展历程 1.1.1 计算机软硬件的发展 1.1.2计算机的分类与发展方向 1.2 计算机系统的组成 1.2.1 系统结构 1 ...

最新文章

  1. python 0o10_Python 从业十年的程序员,写的万字经验分享
  2. oracle第一次使用语句创建作业失败记
  3. Exynos4412 所用外存 —— eMMC
  4. python 内置模块 subprocess
  5. 常用CASE工具介绍
  6. Citrix为什么要兼容第三方服务器虚拟化平台
  7. unity3D学习笔记2
  8. matlab一维插值extrap,matlab一维插值函数
  9. log4j2-rce-cve-2021-44228 漏洞复现
  10. html里怎么计算梯形周长公式是什么,梯形周长公式计算公式
  11. 常用web前端UI组件库
  12. Nvidia驱动负优化与GTX1070的测试
  13. 识读第三角视图(机械识图)
  14. FindWithTag用法
  15. 蓝牙BQB认证所需资料和流程
  16. angular使用@angular/material 出现export 'ɵɵinject' was not found in '@angular/core'
  17. 工作中遭遇的问题及解决办法
  18. 关于——Git命令大全
  19. 安防监控系统流媒体服务器,搭建一套安防监控系统RTSP/Onvif网络摄像头视频流媒体服务有哪些核心要素?...
  20. 原生JS实现抛物线动画以及动态模糊效果

热门文章

  1. ISO质量管理体系认证有哪些流程?
  2. Ubuntu通过tftp与嵌入式设备(开发板)进行文件互传
  3. HDU5266 LCA 树链剖分LCA 线段树
  4. IBM X60驱动程序的安装
  5. 深度:华为芯片的自研之旅
  6. 百度贴吧里见到的一道题
  7. (轉貼) 大年三十整理的asp.net资料! (.NET) (ASP.NET)
  8. sherlock机器视觉软件
  9. 如何在64位win10系统下通过virtualbox虚拟机安装苹果macOS 10.12
  10. 集结社区TOP博主,云享专家优质电子书