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

文章目录

    • 狂神说-Elasticsearch 7.6入门学习笔记
    • Windows Elasticsearch IK分词器插件启动报错
    • Elasticsearch的ik分词器自定义字典myDict.dic的编码格式需要为UTF-8,否则无效
    • Elasticsearch使用term查询无数据返回的原因
    • Elasticsearch如果没给映射,字段默认使用standard映射
    • Elasticsearch SQL说明
    • ElasticSearch SQL转DSL
    • ElasticSearch关联查询
    • ElasticSearch的msearch,
    • ElasticSearch多个字段聚合统计
    • Elasticsearch Painless Script入门教程
    • Elasticsearch 查询模板(Mustache模板引擎)
    • Windows计算文件名的Md5值
    • TortoiseSVN 远程仓库路径更换
    • IDEA 远程仓库路径更换
    • Git修改分支名
    • Git回退到指定版本(两种方法验证通过)
      • 方法一
      • 方法二
    • EasyExcel官方必读文档(包括版本选择)
    • EasyExcel部分字段为什么没法读取或者写入
    • EasyExcel读取动态列
    • MySQL中的unix_timestamp(时间字符)、from_unixtime(数字类型)
    • 抽象类(或者接口)是无法被Spring实例化的,因此无法添加@Service 或 @Componet 注解
    • Spring 循环依赖解决方法
    • Java jsch在Linux中获取sftp连接时失败

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

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

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

错误如下:

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的语法如下:

GET /_msearch

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

GET /索引名/_msearch

请求示例1:

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

请求示例2:

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

ElasticSearch多个字段聚合统计

"cardinality": {
	"script": {
		"lang": "painless",
		"source": "doc['achievementId'].value + doc['contrastId'].value"
	}
}

参考链接

Elasticsearch Painless Script入门教程

参考链接

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

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

Windows计算文件名的Md5值

certutil -hashfile 文件名 MD5

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

TortoiseSVN 远程仓库路径更换

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

IDEA 远程仓库路径更换

Java程序猿搬砖笔记(十六)_第1张图片

Git修改分支名

1、修改本地分支名称
Java程序猿搬砖笔记(十六)_第2张图片
2、在本地将远程分支删除
Java程序猿搬砖笔记(十六)_第3张图片
3、将改名后的本地分支推送到远程仓库
Java程序猿搬砖笔记(十六)_第4张图片

参考链接

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

方法一

1、查询commintId
IDEA界面、命令git log、远程仓库页面都可以
Java程序猿搬砖笔记(十六)_第5张图片
2、git reset --hard commintId
3、git push -f

必须用这个命令强推 或者 用图形界面强推。
Java程序猿搬砖笔记(十六)_第6张图片
否则会报下面的弹窗:
Java程序猿搬砖笔记(十六)_第7张图片

方法二

1、找到Git对应日志 -> 建立分支
Java程序猿搬砖笔记(十六)_第8张图片
2、push提交代码(支持修改代码后提交)
3、修改分支名(参考:Git修改分支名)

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

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

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

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

EasyExcel读取动态列

Java程序猿搬砖笔记(十六)_第9张图片
Java程序猿搬砖笔记(十六)_第10张图片
在这里插入图片描述

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

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

// 动态列处理
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 循环依赖解决方法

启动项目报下面的错:

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、增加允许循环依赖的配置

spring:
    main:
        allow-circular-references: true

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

参考链接

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

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

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依赖如下:

<dependency>
	<groupId>org.netbeans.externalgroupId>
	<artifactId>com-jcraft-jschartifactId>
	<version>RELEASE180version>
dependency>

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

<dependency>
	<groupId>com.jcraftgroupId>
	<artifactId>jschartifactId>
	<version>0.1.54version>
dependency>

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

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

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

参考链接
参考链接

你可能感兴趣的:(java,笔记,elasticsearch)