Java程序猿搬砖笔记(十六)

狂神说-Elasticsearch 7.6入门学习笔记

狂神说-Elasticsearch 7.6入门学习笔记

Windows Elasticsearch IK分词器插件启动报错

错误如下:

1
java.security.Acces ControlException: access denied (\ik\config\IKAnalyzer.cfg.xml" "read")

原因:
D:\Program Files文件夹下的所有文件默认都是只读权限。
解决方法:
Elasticsearch不要安装在 Program Files 、Program Files (x86) 这些目录下。

参考链接

Elasticsearch的ik分词器自定义字典myDict.dic的编码格式需要为UTF-8,否则无效

Elasticsearch使用term查询无数据返回的原因

  • term查询适合查询number、date、keyword
  • term查询text字段,需要映射支持keyword
    参考链接

Elasticsearch如果没给映射,字段默认使用standard映射

建议中文使用ik_max_word映射

Elasticsearch SQL说明

参考链接

ElasticSearch SQL转DSL

官方链接参考链接

ElasticSearch关联查询

百家号知乎

ElasticSearch的msearch,

msearch支持多索引uion联合查询。
msearch的语法如下:

1
GET /_msearch

查询一条数据它需要两个对象,第一个设置index和type,第二个设置查询语句。查询语句和search相同。
如果只是查询一个index,我们可以在url中带上index,语法如下:

1
GET /索引名/_msearch

请求示例1:

1
2
3
4
5
GET /repetition-result/_msearch
{}
{"query" : {"term" : {"achievementId" : "1"}}, "size" : 3}
{}
{"query" : {"term" : {"contrastId" : "1"}}, "size" : 3}

请求示例2:

1
2
3
4
5
GET /repetition-result/_msearch
{}
{"query" : {"term" : {"achievementId" : "1"}}, "size" : 3}
{"index": "repetition-result-test"}
{"query" : {"term" : {"contrastId" : "3"}}, "size" : 3}

ElasticSearch多个字段聚合统计

1
2
3
4
5
6
"cardinality": {
"script": {
"lang": "painless",
"source": "doc['achievementId'].value + doc['contrastId'].value"
}
}

参考链接

Elasticsearch Painless Script入门教程

参考链接

Elasticsearch 查询模板(Mustache模板引擎)

参考链接
参考链接
参考链接

Windows计算文件名的Md5值

certutil -hashfile 文件名 MD5

1
C:\>certutil -hashfile E:\Downloads\ZGGX-ZF-CMND-2023200015.xlsx  MD5

TortoiseSVN 远程仓库路径更换

  • 右键项目文件夹 TortoiseSVN => Relocate
  • 在 To URL 中输入新的仓库地址点击 OK
  • 根据提示填入账户名密码即可

IDEA 远程仓库路径更换

在这里插入图片描述

Git修改分支名

1、修改本地分支名称
在这里插入图片描述
2、在本地将远程分支删除
在这里插入图片描述
3、将改名后的本地分支推送到远程仓库
在这里插入图片描述

参考链接

Git回退到指定版本(两种方法验证通过)

方法一

1、查询commintId
IDEA界面、命令git log、远程仓库页面都可以
在这里插入图片描述
2、git reset --hard commintId
3、git push -f

必须用这个命令强推 或者 用图形界面强推。
在这里插入图片描述
否则会报下面的弹窗:
在这里插入图片描述

方法二

1、找到Git对应日志 -> 建立分支
在这里插入图片描述
2、push提交代码(支持修改代码后提交)
3、修改分支名(参考:Git修改分支名)

EasyExcel官方必读文档(包括版本选择)

EasyExcel官方必读文档(包括版本选择)

EasyExcel部分字段为什么没法读取或者写入

使用了lombok的@Accessors(chain = true) ,无法被Cglib读取
建议使用@Builder来替换@Accessors(chain = true)

EasyExcel读取动态列

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

上面的截图有两个错误:① 动态列需要加上@ExcelIgnore注解(或者实体类加@ExcelIgnoreUnannotated) ② context.readStringCell(i)方法不存在

解决参考代码(验证通过):

1
2
3
4
5
6
7
8
// 动态列处理
List<String> dynamicDataList = new ArrayList<>();
for(int i = 5; i < readRowHolder.getCellMap().size(); i++){
ReadCellData ReadCellData = (ReadCellData)readRowHolder.getCellMap().get(i);
if(StringUtils.isNotBlank(ReadCellData.getStringValue())){
dynamicDataList.add(ReadCellData.getStringValue());
}
}

MySQL中的unix_timestamp(时间字符)、from_unixtime(数字类型)

from_unixtime()把long类型时间戳格式化
参考链接

抽象类(或者接口)是无法被Spring实例化的,因此无法添加@Service 或 @Componet 注解

Spring 循环依赖解决方法

启动项目报下面的错:

1
2
3
4
5
6
7
8
9
10
11
12
13
The dependencies of some of the beans in the application context form a cycle:
testController (field private com.aspire.achievement.repetition.service.RepetitionAbilityService com.aspire.achievement.repetition.controller.TestController.repetitionAbilityService)
┌─────┐
| repetitionAbilityServiceImpl (field private com.aspire.achievement.repetition.service.RepetitionTaskService com.aspire.achievement.repetition.service.impl.RepetitionAbilityServiceImpl.repetitionTaskService)
↑ ↓
| repetitionTaskServiceImpl (field private com.aspire.achievement.repetition.factory.BlockQueueFactory com.aspire.achievement.repetition.service.impl.RepetitionTaskServiceImpl.blockQueueFactory)
↑ ↓
| blockQueueFactory (field private com.aspire.achievement.repetition.service.RepetitionAbilityService com.aspire.achievement.repetition.factory.BlockQueueFactory.repetitionAbilityService)
└─────┘

Action:

Relying upon circular references is discouraged and they are prohibited by default. Update your application to remove the dependency cycle between beans. As a last resort, it may be possible to break the cycle automatically by setting spring.main.allow-circular-references to true.

解决方法:
1、代码中主动取消循环依赖
2、增加允许循环依赖的配置

1
2
3
spring:
main:
allow-circular-references: true

3、添加延迟加载@Lazy注解 (未成功)

参考链接

Java jsch在Linux中获取sftp连接时失败

在本地Windows操作远程sftp服务器,完全没问题。但是部署到Linux服务器时,出现下面的错误:

1
2
3
Session.connect: java.security.InvalidAlgorithmParameterException: 
DH key size must be multiple of 64, and can only range from 512 to 2048 (inclusive).
The specific key size 3072 is not supported

本地和linux都是jdk 1.8的环境。
经排查,发现项目引入的jsch依赖如下:

1
2
3
4
5
<dependency>
<groupId>org.netbeans.external</groupId>
<artifactId>com-jcraft-jsch</artifactId>
<version>RELEASE180</version>
</dependency>

解决方法:
1、使用jdk 1.8以上的环境
2、更换jsch依赖(经测试0.1.54也可以)

1
2
3
4
5
<dependency>
<groupId>com.jcraft</groupId>
<artifactId>jsch</artifactId>
<version>0.1.54</version>
</dependency>

注:如果0.1.52版本在windows环境中运行会报下面的错:

1
com.jcraft.jsch.JSchException: Session.connect: java.io.IOException: End of IO Stream Read

解决方法:更换jsch依赖为0.1.54即可。

参考链接
参考链接