【ElasticSearch8.X】学习笔记
六、中文分词
为了能够更好地对中文进行搜索和查询,就需要在Elasticsearch中集成好的分词器插件,而 IK 分词器就是用于对中文提供支持得插件
6.1、下载
选择下载的版本要与 Elasticsearch 版本对应。我们这里选择 8.1.0
下载地址
6.2、安装
如果是es集群的话,每台es都需要安装ik分词器
先在plugins里创建elasticsearch-analysis-ik文件夹
安装包上传到elk的 elasticsearch-analysis-ik中并解压
unzip elasticsearch-analysis-ik-8.1.0.zip
重启elk即可
6.3、使用
IK 分词器提供了两个分词算法:
- ik_smart: 最少切分
- ik_max_word:最细粒度划分
GET _analyze
{
"analyzer": "ik_smart",
"text": ["我是一个学生"]
}

GET _analyze
{
"analyzer": "ik_max_word",
"text": ["我是一个学生"]
}

6.4、自定义分词效果
集群都是一样操作
/usr/soft/elasticsearch8/plugins/elasticsearch-analysis-ik-8.1.0/config
新建分词eg.dic

修改配置文件:IKAnalyzer.cfg.xml

重启集群

七、文档得分
Lucene 和 ES 的得分机制是一个基于词频和逆文档词频的公式,简称为 TF-IDF 公式

公式中将查询作为输入,使用不同的手段来确定每一篇文档的得分,将每一个因素最后通过公式综合起来,返回该文档的最终得分。这个综合考量的过程,就是我们希望相关的文档被优先返回的考量过程。在 Lucene 和 ES 中这种相关性称为得分。
- TF (词频)
Term Frequency : 搜索文本中的各个词条(term)在查询文本中出现了多少次,出现次数越多,就越相关,得分会比较高 - IDF(逆文档频率)
Inverse Document Frequency : 搜索文本中的各个词条(term)在整个索引的所有文档中出现了多少次,出现的次数越多,说明越不重要,也就越不相关,得分就比较低。
分析文档数据打分过程
# 增加分析参数
GET /myindex/_search?explain=true
{
"query": {
"match_all": {}
}
}
八、新JavaAPI
8.1、maven
<dependencies>
<dependency>
<groupId>org.elasticsearch.plugin</groupId>
<artifactId>x-pack-sql-jdbc</artifactId>
<version>8.1.0</version>
</dependency>
<dependency>
<groupId>co.elastic.clients</groupId>
<artifactId>elasticsearch-java</artifactId>
<version>8.1.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.12.3</version>
</dependency>
<dependency>
<groupId>jakarta.json</groupId>
<artifactId>jakarta.json-api</artifactId>
<version>2.0.1</version>
</dependency>
</dependencies>
8.2、获取客户端操作
Java 通过客户端操作 Elasticsearch 也要获取到连接后才可以。咱们现在使用的基于 https 安全的 Elasticsearch 服务,所以首先我们需要将之前的证书进行一个转换
cd /usr/soft/elasticsearch8/config/certs
openssl pkcs12 -in elastic-stack-ca.p12 -clcerts -nokeys -out java-ca.crt
将java-ca.crt下载下来 在项目文件下创建cert文件夹,并将java-ca.crt拷贝进去

8.2、UserBean
import java.io.Serializable;
public class User implements Serializable {
private Integer id;
private String name;
private Integer age;
public Integer getId() {
return id;}
public void setId(Integer id) this.id = id;}
public String getName() {
return name;}
public void setName(String name) {
this.name = name;}
public Integer getAge() {
return age;}
public void setAge(Integer age) {
this.age = age;}
public User() {
}
public User(Integer id, String name, Integer age

本文介绍了如何在ElasticSearch8.x中集成和使用IK分词器,包括下载、安装、使用以及自定义分词效果。同时,讲解了文档得分的原理,即TF-IDF公式。此外,还涉及了使用新JavaAPI进行操作,包括maven依赖、客户端连接及证书处理,并展示了创建、查询和删除文档的代码示例。
最低0.47元/天 解锁文章
303

被折叠的 条评论
为什么被折叠?



