[ES笔记]持续更新中
工作中使用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笔记]持续更新中相关推荐
- typescript-----javascript的超集,typescript学习笔记持续更新中......
Typescript,冲! Typescript 不是一门全新的语言,Typescript是 JavaScript 的超集,它对 JavaScript进行了一些规范和补充.使代码更加严谨. 一个特别好 ...
- SpringCloud学习笔记,课程源自黑马程序员,笔记持续更新中...
@SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式: 学习内容 1.服务拆分-服务远程调用: 2.搭建eureka服务: 2.1.eureka服务注册-client 2 ...
- JS逆向学习笔记 - 持续更新中
JS逆向学习笔记 寻找深圳爬虫工作,微信:cjh-18888 文章目录 JS逆向学习笔记 一. JS Hook 1. JS HOOK 原理和作用 原理:替换原来的方法. (好像写了句废话) 作用: 可 ...
- 专升本 计算机 公共课学习笔记(持续更新中...)
计算机公共课学习笔记 第一章 计算机基础知识(30分) 1.计算机概述 计算机(Computer)的起源与发展 计算机(Computer)也称"电脑",是一种具有计算功能.记忆功能 ...
- Python学习小甲鱼视频做的笔记(持续更新中)
Python BIF :Built-in functions(内建函数) Python与大多数其他计算机语言的做法稍有不同,他并不是把值存储在变量中,而更像是把名字贴在值的上边. 在使用变量之前,必须 ...
- Docker快速入门学习笔记-持续更新中
Docker安装 #1.卸载旧的版本 yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker ...
- 渗透测试笔记 -------------持续更新中~
文章目录 渗透测试 1.Windows基础 1.1 渗透测试介绍 1.2 渗透测试的特点 1.3 渗透测试流程 1.4 Windows网站篇 http协议 http头讲解 静态网站 动态网站 1.5 ...
- Java学习笔记(持续更新中)
文章目录 项目实战 mall项目(SpringBoot项目) 1. 添加Swagger-UI配置,修改MyBatis Generator注释的生成规则 2. redis基础配置 3. SpringSe ...
- 计算机组成原理笔记(持续更新中!)
(标三角号的相比之下不是非常重要) 文章目录 1 导论 ▲1.1 计算机的发展历程 1.1.1 计算机软硬件的发展 1.1.2计算机的分类与发展方向 1.2 计算机系统的组成 1.2.1 系统结构 1 ...
最新文章
- python 0o10_Python 从业十年的程序员,写的万字经验分享
- oracle第一次使用语句创建作业失败记
- Exynos4412 所用外存 —— eMMC
- python 内置模块 subprocess
- 常用CASE工具介绍
- Citrix为什么要兼容第三方服务器虚拟化平台
- unity3D学习笔记2
- matlab一维插值extrap,matlab一维插值函数
- log4j2-rce-cve-2021-44228 漏洞复现
- html里怎么计算梯形周长公式是什么,梯形周长公式计算公式
- 常用web前端UI组件库
- Nvidia驱动负优化与GTX1070的测试
- 识读第三角视图(机械识图)
- FindWithTag用法
- 蓝牙BQB认证所需资料和流程
- angular使用@angular/material 出现export 'ɵɵinject' was not found in '@angular/core'
- 工作中遭遇的问题及解决办法
- 关于——Git命令大全
- 安防监控系统流媒体服务器,搭建一套安防监控系统RTSP/Onvif网络摄像头视频流媒体服务有哪些核心要素?...
- 原生JS实现抛物线动画以及动态模糊效果