因为项目中的es要升级,自己又不太会,所以学习学习和es 6 的区别,搞个单节点,看一下链接初始化 和方法api
1 安装window 环境es 7.6
安装包链接:
链接:https://pan.baidu.com/s/1ERcJ7I4bbDEMb_yGNVYQcw
提取码:kks0
下载后直接解压:
es 是java 开发的所以运行需要安装jdk。 7.6 说是最低要jdk11 不过目前看jdk8 也可以运行。
运行window es
2 使用head 插件连接 es
还是一个空的es 节点
3 目前我知道的主要的区别
版本:
5.x 支持多种type
6.x 只能有一种type
7.x 将去除type 没有类型的概念了
7.X 不再支持 TransportClient
4 安装一个ik
下载地址:
链接:https://pan.baidu.com/s/1BUN-rbBiRDShOmmRYuV7Ew
提取码:weoa
在plugins 中建ik 文件夹
然后将压缩包解压到 ik 下即可
注意: ik 解压后的elasticsearch-analysis-ik-*.*.*.jar 版本 必须和 当前的es版本保持一致。否则会报错
java.lang.IllegalArgumentException: Plugin [analysis-ik] was built for Elasticsearch version 7.3.0
报错截图:
5 启动后测试分词效果;
ik 有ik_smart 和 ik_max_word
路径:http://localhost:9200/_analyze/
参数:
{
"analyzer": "ik_max_word",
"text": "这是一个开心的故事"
}
请求方式: post
ik_smart 分词结果:
ik_max_word 分词结果
增加测试索引 测试分词查询:
在7.6.2 的 es 中增加mapping 映射如果带上 类型会报错:如截图
去掉type 之后是可以写入成功的:如图
{
"mappings": {
"properties": {
"id": {
"type": "long",
"store": true
},
"title": {
"type": "text",
"store": true,
"analyzer": "ik_smart"
},
"content": {
"type": "text",
"store": true,
"analyzer": "ik_smart"
}
}
}
}
然后插入几条数据,进行不同的查询测试:
7.6.2 插入数据的时候也需要指定 类型_doc 否则会报错,如图:
加上_doc 后 可以正常插入
插入的数据内容如图:
通过term 查询 只查询到了两个, _id 为 3 4 5 的没查询到,下面找一下原因:
通过分词 可以看出来原因,因为_id 3 4 5 的内容 分词 没有分出来 ‘歌曲’,只分出来了‘首歌曲’
使用query_string 查询,query_string 输入的关键词会进行分词后再进行匹配:
{
"query": {
"query_string": {
"default_field": "title",
"query": "歌曲"
}
}
}
解决上面歌曲查不到的情况,增加扩展词:
配置引用扩展词文件:
重启 es 重启es 是为了 让后来加的 扩展词生效:
重启后 需要重新生产索引文件 ,才可以使 扩展词在索引中生效;使用_reindex
重新生成后,再次使用query_string 查询 ,就可以查询到_id 为 3 4 5 的数据了
{
"query": {
"query_string": {
"default_field": "title",
"query": "歌曲"
}
}
}
增加扩展词之后 通过analyze 也可以看到效果,加之前是分不出来 歌曲 的;