注意版本,版本之间存在差异
注意版本,版本之间存在差异
注意版本,版本之间存在差异
?前言
接上一篇文章:ELK–分词&Lunece
?查看分词
POST _analyze
{
"analyzer":"ik_max_word",
"text":"吃葡萄不吐葡萄皮"
}

?创建索引
PUT /abner/
{
"settings":{
"index":{
"number_of_shards" : "3",
"number_of_replicas" : "0"
}
}
}

- number_of_shards :分片数 ,创建之后不能更改
数据分片数设置:一个分片大约100G数据,一台机器500G - number_of_replicas:备份数
# 查看abner的配置
GET /abner/_settings
# 查看所有索引下的配置
GET /_all/_settings

✨Mapping
PUT abner/_mapping/userInfo?include_type_name=true
{
"properties": {
"name": {
"type": "text",
"index": true,
"analyzer": "ik_max_word",
"search_analyzer": "ik_smart"
},
"desc": {
"type": "text",
"index": true,
"analyzer": "ik_smart",
"search_analyzer": "ik_max_word"
},
"desc2":{
"type": "text",
"index": true,
"analyzer": "standard",
"search_analyzer": "standard"
}
}
}

在ES高版本要设置include_type_name=true

随着 7.0 版本的即将发布,type 的移除也是越来越近了,在 6.0 的时候,已经默认只能支持一个索引一个 type 了,7.0 版本新增了一个参数 include_type_name ,即让所有的 API 是 type 相关的,这个参数在 7.0 默认是 true,不过在 8.0 的时候,会默认改成 false,也就是不包含 type 信息了,这个是 type 用于移除的一个开关。
# 查看创建的mapping
GET /abner/_mapping/userInfo?include_type_name=true
?插入数据
# 插入数据 #/索引名/类型名/id
PUT /abner/userInfo/1
{
"name":"进口红酒",
"desc":"乒乓球拍卖完了",
"desc2":"进口红酒"
}
PUT /abner/userInfo/2
{
"name":"这是一支口红",
"desc":"球拍卖完了",
"desc2":"进口红酒"
}
PUT /abner/userInfo/3
{
"name":"一口一红",
"desc":"乒乓球拍卖会",
"desc2":"进口红酒"
}

?搜索数据
GET /abner/userInfo/_search
{
"query":{
"match": {
"name": {
"query":"进口"
}
}
}
}

说明
name字段使用ik_max_word分词
- 【进口红酒】分词结果:【进口】【口红】【红酒】
- 【这是一支口红】分词结果:【这是】【一支】【一】【支】【口红】
- 【一口一红】分词结果:【一口】【一】【口】【一红】【一】【红】
搜索”进口“使用 ik_smart 分词,分词结果为【进口】
所以查询结果只有一个【进口红酒】
检索自带分词器
以desc 字段为例(ik_smart分词):
- 【乒乓球拍卖完了】分词结果: 【乒乓球】【拍卖】【完了】
- 【球拍卖完了】 分词结果: 【球拍】【卖】【完了】
- 【乒乓球拍卖会】分词结果: 【乒乓球】【拍卖会】
检索”拍卖会“ 使用”ik_max_word“ 分词,分词结果为:【拍卖会】【拍卖】【会】
推测结果为:【乒乓球拍卖完了】【乒乓球拍卖会】两个结果
检索条件加一个分词器,例如给检索分词器换为”standard“ 结果如下
GET /abner/userInfo/_search
{
"query":{
"match": {
"desc": {
"analyzer":"standard",
"query":"拍卖会"
}
}
}
}

创建索引时,可以为每个字段指定分词器,若用 ik,需要自己在es里面安装ik插件,不指定则是默认的(默认的分词效果很不好)
就像上面的这条索引:
“analyzer” 指定 这个字段在创建索引的时候使用的分词器
“search_analyzer” : 指定 这个字段在被检索的时候,给定的检索字段所用的分词器
检索的时候自己再指定分词器,那么这次查询就使用你新指定的分词器,而覆盖掉创建索引时指定的分词器
————————————————
版权声明:本文为CSDN博主「一笑生风丶」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_43871371/article/details/102973708
?删除索引
# 删除索引
DELETE abner

⭐️总结
调用API注意点
索引类比数据库(这里为了理解不同术语的关系,不能真正等同)
| ES术语 | 数据库 | 示例中 |
|---|---|---|
| index(索引名称) | 数据库名称 | abner |
| type名称 | 表名 | userInfo |
| 字段名 | 字段名 | name/desc/desc2 |
| type | 字段类型 | text |
同一个索引中不能建多个mapping
主键ID的指定

ES 分页在内存中分页
如果查第98页的数据,会把前98页数据全部加载到内存