工作中使用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. 词向量背后精妙的数学
  2. 显卡玩家の反击!矿难一个月,618集体大战黄牛“降价也不买”
  3. 4.1 MyEclipse中搭建Struts2开发环境
  4. ThreadLocal的原理与使用
  5. python人工智能要学什么_为什么学人工智能首推Python 需要学习哪些知识
  6. 7-28 超市贴花 (5 分)
  7. CSDN博主排名更新公告
  8. 《C++ Primer》2.6.1节练习
  9. 21OGNL与ValueStack(VS)-静态方法访问
  10. 解决 favicon.ico 404 (Not Found)
  11. Python Tricks(五)—— 计算 list of lists 的长度(元素个数)
  12. windows下,Kiwi_Syslog日志服务器的搭建
  13. 顺序栈和链栈实现汉洛塔
  14. Proximal Policy Optimization(PPO)算法原理及实现!
  15. JQ彩色3D纸片折叠动画
  16. uniapp根据ui设计图实现新增和删除功能
  17. 大数据工程师就业前景及发展方向分析
  18. 内蒙古大学计算机学院教授,内蒙古大学计算机学院软件学院硕士生导师:张俊星...
  19. 1,10-菲啰啉是氧化还原指示剂|双齿配体各类反应
  20. CSI笔记【2】:正交频分多路复用技术/OFDM

热门文章

  1. java p2p 下载_java p2p文件传输(含服务器端与jsp源码)
  2. 财路网每日原创推送:2019年区块链在企业应用中扮演的角色
  3. HDU 2838 Cow Sorting(双树状数组+求逆序数)
  4. 5个常常被大家忽略的Python小技巧
  5. Sci-hub文献下载器
  6. C语言中Switch语句的范围比较解决方案(学习笔记)
  7. 黑客社会工程学攻击2 新书来袭
  8. GowLom2 战神引擎传奇手游Mir200\Envir 目录主要配置文件中文翻译大全
  9. (附源码)php遵义旅游管理系统 毕业设计091801
  10. 《赢在中国》-创业者学历