ES系列二之常见问题解决
一 更新ES信息报错
报错信息如下:
Use ElasticsearchException.getFailedDocuments() for detailed messages [{yjZ8D0oB=ElasticsearchException[Elasticsearch exception [type=cluster_block_exception, reason=index [au_report] blocked by: [FORBIDDEN/12/index read-only / allow delete (api)];]]
分析:看报错信息大概意思就是es的写入操作被阻塞了,索引只能读、删不能修改新增了;我总结了这种错误的解决方案以及步骤,如下:
- 1、发送请求将read_only_allow_delete属性置成false或者删除;如下:
curl --location --request PUT 'http://127.0.0.1:9200/au_report/_settings' \
--header 'Content-Type: application/json' \
--data-raw '{
"index.blocks.read_only_allow_delete": null
}'
read_only_allow_delete表示es只读和允许删除不能做修改操作,当磁盘空间达到95%时自动为true;
- 2、如果上述请求成功后仍然报错,那么可以查看es使用磁盘的空间占用情况,调用如下:
curl --location --request GET 'http://127.0.0.1:9200/_cat/allocation?v'
下面贴上该请求返回的各项代表的意思:- shards:分片数
- disk.indices:索引index占用的空间大小
- disk.used:已用磁盘空间
- disk.avail:可用磁盘空间
- disk.total:磁盘空间总量
- disk.percent:磁盘已使用百分比
- host:节点主机地址
- ip:节点ip
- node:节点名称
- 3、我的情况就是这里发现disk.percent磁盘已使用空间的百分比已经超过98%了,所以我的当务之急是改配置或者删数据;由于我这边的es服务并非自己搭建的,于是登录es主机进行了以下操作
- 通过jps或者ps -ef | grep elastic查看es的进程ID
- 通过ll /proc/进程ID/cwd 查看es安装位置
- 通过查看es的配置文件/elasticsearch-7.6.2/config/elasticsearch.yml的配置发现并未配置es文件的落盘位置,那么默认应该是与当前安装目录在同一个磁盘;
- 于是通过df -h [指定目录] 查看es安装目录磁盘占用情况,发现果然超过95%了,其实上面通过/_cat/allocation?v请求已经知悉磁盘空间使用情况了,这里只是做一个校验确定
- 4、由于磁盘空间我这边无法清理,于是找运维同事在有足够磁盘空间的目录下创建data和log文件夹,然后将elasticsearch.yml里的path.data和path.log的值换成新建的data和log目录,然后重启就解决了这个报错
二、命中结果高亮展示
我使用的spring-data-elasticsearch的版本是4.3.4,其实只要在ES系列一之java端API操作;分页查询的测试方法queryPageData()基础上新增HighlightBuilder
设置需要高亮的字段然后设置到返回结果去即可,下面贴上查询代码:
@Testpublic void queryPageData(){// 此处应是查询参数,这里单元测试没有赋值TestQuery query = new TestQuery();query.setTextKey("张三");PaginationModel<EsTestInfo> res = new PaginationModel<>();int currentPage=query.getPageIndex()-1;int pageSize = query.getPageSize();PageRequest pageRequest = PageRequest.of(currentPage, pageSize);BoolQueryBuilder boolQueryBuilder = new BoolQueryBuilder();BoolQueryBuilder textKeyBqb = new BoolQueryBuilder();if (StringUtils.isNotBlank(query.getTextKey())) {/*** 由于下面会用到must查询,所以此处用textKeyBqb再封装一个builder出来,否则* 和must同时查询此处会出现0匹配也返回结果的情况* 如果不想封装textKeyBqb,加上boolQueryBuilder.minimumShouldMatch(1)强制使es* 最少满足一个should子句才能返回结果也行*/textKeyBqb.should(QueryBuilders.matchQuery("id", query.getTextKey())).should(QueryBuilders.matchQuery("name", query.getTextKey())).should(QueryBuilders.matchQuery("desc", query.getTextKey()));}if (Objects.nonNull(query.getStartDate()) && Objects.nonNull(query.getEndDate())) {RangeQueryBuilder timeRangeQuery = QueryBuilders.rangeQuery("publishDt").gte(query.getStartDate().getTime()).lte(query.getEndDate().getTime());boolQueryBuilder.must(timeRangeQuery);}if (Objects.nonNull(query.getRptStatus())) {boolQueryBuilder.must(QueryBuilders.matchQuery("rptStatus", query.getRptStatus()));}// 将上面封装的子句加入到主查询条件中boolQueryBuilder.must(textKeyBqb);log.info("<<<<<<<<<<<<<<<<<<boolQueryBuilder:{}",boolQueryBuilder);NativeSearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(boolQueryBuilder).withPageable(pageRequest)// 设置需要高亮的字段.withHighlightFields(new HighlightBuilder.Field("name"),new HighlightBuilder.Field("desc"))// 设置高亮的html格式.withHighlightBuilder(new HighlightBuilder().preTags("<span style='color:red'>").postTags("</span>")).build();// 解决es一次只返回10000条数据的问题searchQuery.setTrackTotalHits(true);SearchHits<EsTestInfo> search = elasticsearchRestTemplate.search(searchQuery, EsTestInfo.class);List<EsTestInfo> list = new ArrayList<>();for (SearchHit<EsTestInfo> productSearchHit : search) {EsTestInfo pro = productSearchHit.getContent();//获取高亮的字段集合Map<String, List<String>> highlightFields = productSearchHit.getHighlightFields();//将高亮的内容填充到pro中pro.setName(highlightFields.get("name")==null ? pro.getName():highlightFields.get("name").get(0));pro.setDesc(highlightFields.get("desc")==null ? pro.getDesc():highlightFields.get("desc").get(0));System.out.println("pro = " + pro);list.add(pro);}res.setList(list);res.setTotal(search.getTotalHits());res.setPageIndex(query.getPageIndex());res.setPageSize(query.getPageSize());System.out.println("res = " + res);}
C# 折叠 复制 全屏
测试结果如下:
这次更新的问题到此结束,后续遇到新的问题会继续补充......
ES系列二之常见问题解决相关推荐
- 【人见人爱报错系列】Git常见问题解决大全
前言 在使用的github\gitlab各种hub的过程中,会遇到各种各样的小问题,这些会给程序员们带来五光十色的烦恼,本文总结使用git的各种问题并持续更新. 一.Git用户名邮箱设置 使用git过 ...
- 联想黑苹果找不到触摸板_联想V330-15IKB完美黑苹果,和笔记本各类常见问题解决办法...
本帖最后由 rclhxm 于 2020-9-17 20:31 编辑 前言 最近用了一周的时间把我的联想V330-15IKB给装上了10.15.6的黑苹果,并完美驱动(完善程度90%以上,因为可能有些领 ...
- ES系列十六、集群配置和维护管理
一.修改配置文件 1.节点配置 1.vim elasticsearch.yml # ======================== Elasticsearch Configuration ===== ...
- linux系统启动的第一个进程是,linux系统启动流程及常见问题解决
运行环境:centos6 Vmware 一.系统启动流程介绍 linux系统启动时我们可以看到很多启动信息,整体来说系统启动分为以下几个过程:加电自荐:power on system test 选择启 ...
- 飞凌iMX6系列产品i.MX6解决方案-IMX6Q经验分享-i.MX6Q系列常见问题解决
飞凌 iMX6系列产品一直在不断更新,包括 i.MX6ULL.i.MX6UL.i.MX6DL. i.MX6Q,目前飞凌 iMX8系列产品也已经发布.飞凌iMX6平台凭借其优异的性能,使得大量的用户选择 ...
- es elasticsearch 几种常见查询场景 二次分组 java读取es的查询json文件
大家好,我是烤鸭: es中几种常见的查询场景,使用java读取es的json文件进行查询. es 中文使用手册. https://www.elastic.co/guide/cn/elasticsear ...
- 使用jQuery的插件qrcode生成二维码(静态+动态生成)及常见问题解决方法
使用jQuery的插件qrcode生成二维码(静态+动态生成)及常见问题解决方法 参考文章: (1)使用jQuery的插件qrcode生成二维码(静态+动态生成)及常见问题解决方法 (2)https: ...
- 统计系列(二)常见的概率分布
统计系列(二)常见的概率分布 离散概率分布 伯努利分布 背景:抛一次硬币,正面朝上的概率 定义:一次试验中,只有两种结果,成功(X=1)概率为p,失败(X=0)概率为1-p.定义为伯努利试验. 数学描 ...
- Spring常见问题解决 - AOP调用被拦截类的属性报NPE
Spring常见问题解决 - AOP调用被拦截类的属性报NPE 一. 案例复现 二. 被拦截类的属性为何是null? 2.1 原理分析 2.2 解决 2.2.1 为何加一个 get 方法就可以避免NP ...
最新文章
- Spring boot自动配置模式
- android加载圈,SwipeRefreshLayout加载圈不会隐藏在android中
- 9行代码AC_HDU-6374 Decimal(余数,因子)
- CC框架实践(1):实现登录成功再进入目标界面功能
- android自定义alertdialog不现实输入法,自定义的dialog中的EditText无法弹出输入法解决方案...
- linux 中断和进程 传递,Linux内核之进程上下文和中断上下文的区别
- 雪花算法id长度_【Java】分布式自增ID算法雪花算法 (snowflake,Java版)
- OObjective-c UIView 蒙层
- Linux系统下从百度云快速下载文件的姿势(2020.07月更)
- html 选择题代码,JS实现简单的选择题测评系统代码思路详解(demo)
- 小程序去水印解析接口,短视频解析稳定API接口教程
- 数据结构 创建结构体学生表 c语言
- 实战 | 一键导出微信阅读记录和笔记
- android高德SDK无法定位,高德地图 getLocation无法定位的问题
- CNN与句子分类之动态池化方法DCNN--模型介绍篇
- 智能电视linux系统安装当贝,三星电视怎样安装当贝应用?
- Android Studio 实现单选对话框
- 服务器为什么需要防御呢?
- windows桌面便笺使用小技巧Win10便利贴不见了在哪里调出来Win10便签怎么用
- 常用技术指标之一文读懂RSI指标