ElasticSearch 简介与安装(一)
上一篇我们去安装了ElasticSearch和可视化工具kibana,本章咱们针对可视化工具,去操作一些ES提供的Restful-API,去实际上调用一些ElasticSearch的功能,让我们看看ES到底有哪些功能吧。
分词器
顾名思义,文本分析就是把全文本转换成一系列单词(term/token)的过程,也叫分词。在 ES 中,Analysis 是通过分词器(Analyzer) 来实现的,可使用 ES 内置的分析器或者按需定制化分析器。
举一个分词简单的例子: 比如你输入 Mastering Elasticsearch,会自动帮你分成两个单词,一个是 mastering,另一个是 elasticsearch,可以看出单词也被转化成了小写的。
中文推荐 ik分词器,对中文汉字去分词很友好,下面也会有对比图。
默认分词器-standard
在中文上,会将汉字拆分成单个汉字,也被称之为单字分词器。
ik分词器
ik_smart模式
粗粒度的拆分
ik_max_word模式
细粒度拆分
ik的分词器是需要集成,需要安装插件。
ik分词器插件安装
安装很简单: 创建路径 : /usr/local/es/elasticsearch-7.6.1/plugins/ik
我们之前es是安装在 /usr/local/es 目录下的,我们只需要找到安装的es下的plugins文件加下,将下载好的ik插件解压进去,然后重启es就可以。
(ik插件下载地址) https://github.com/medcl/elasticsearch-analysis-ik/releases
注意:ik的版本要和es的版本一致的,还有就是根据自己安装的插件,创建具体的文件路径。
操作Api
POST _analyze 分词分析过程
_analyze是Elasticsearch一个非常有用的API,它可以帮助你分析每一个field或者某个analyzer/tokenizer是如何分析和索引一段文字,有助于我们去理解ES和在使用的过程中,怎么保证索引命中。
POST _analyze
{
"analyzer":"ik_max_word",
"text":"我爱你中国"
}
#响应
{
"tokens" : [
{
"token" : "我爱你",
"start_offset" : 0,
"end_offset" : 3,
"type" : "CN_WORD",
"position" : 0
},
{
"token" : "爱你",
"start_offset" : 1,
"end_offset" : 3,
"type" : "CN_WORD",
"position" : 1
},
{
"token" : "中国",
"start_offset" : 3,
"end_offset" : 5,
"type" : "CN_WORD",
"position" : 2
}
]
}
创建索引 dxt索引
PUT /dxt
#响应
{
"acknowledged" : true,
"shards_acknowledged" : true,
"index" : "dxt"
}
查索引
GET /dxt
#响应
{
"dxt" : {
"aliases" : { },
"mappings" : { },
"settings" : {
"index" : {
"creation_date" : "1627901493723",
"number_of_shards" : "1",
"number_of_replicas" : "1",
"uuid" : "krY5xm1mSdqxaJQD6EGuuQ",
"version" : {
"created" : "7060199"
},
"provided_name" : "dxt"
}
}
}
}
删索引
GET /dxt
#响应
{
"acknowledged" : true
}
创建数据/更新数据
/database/type/唯一id
PUT /dxt/_doc/1001
{
"name":"法外狂徒-张三",
"age":"21",
"address":"广州天河区"
}
#响应
{
"_index" : "dxt",
"_type" : "_doc",
"_id" : "1001",
"_version" : 1,
"result" : "created",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 0,
"_primary_term" : 1
}
POST局部更新
POST /dxt/_update/1001
{
"doc": {
"name":"狂徒-张三", #已有的字段更新
"zhiye":"法师" #新的字段新增
}
}
#响应
{
"_index" : "dxt",
"_type" : "_doc",
"_id" : "1001",
"_version" : 2, #更新的版本会+1
"result" : "updated",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 1,
"_primary_term" : 1
}
#局部更新 旧写法
POST /dxt/_doc/1001/_update
{
"doc": {
"name":"法内-张三"
}
}
POST和PUT都能够创建/更新数据,他们的区别:
- put创建数据时是要指定id键的,post创建数据的时候是可以不指定唯一键,由es自己生成唯一id。
- put会将整个数据进行替换,而post是将相同key值进行替换。
- GET、PUT和DELETE都是幂等性的操作,不论操作几次得到的结果都是一样的。
方法的幂等性,体现在我们在操作esapi的时候,操作一次和几次的效果是一样的。而post就以创建为例,如果不指定唯一id,是由es自己去创建,那么每次生成的id是不一样,所以它是无法保证幂等的。
ES7.版本的 默认type是_doc。
查询数据
查询
GET /dxt/_doc/1001
#响应
{
"_index" : "dxt",
"_type" : "_doc",
"_id" : "1001",
"_version" : 2,
"_seq_no" : 1,
"_primary_term" : 1,
"found" : true,
"_source" : {
"name" : "法内-张三",
"age" : "21",
"address" : "广州天河区",
"zhiye" : "法师"
}
}
删除数据
GET /dxt/_doc/1003
#响应
{
"_index" : "dxt",
"_type" : "_doc",
"_id" : "1002",
"_version" : 2,
"result" : "deleted",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 4,
"_primary_term" : 1
}
查询所有的数据 例如:select * from user
GET /dxt/_search
#响应
{
"took" : 777,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 1,
"relation" : "eq"
},
"max_score" : 1.0,
"hits" : [
{
"_index" : "dxt",
"_type" : "_doc",
"_id" : "1001",
"_score" : 1.0, #查询的匹配得分,排名,分数越大匹配越好
"_source" : {
"name" : "法内-张三",
"age" : "21",
"address" : "广州天河区",
"zhiye" : "法师"
}
}
]
}
}
条件查询
类似sql select * from dxt where name=‘张三’
GET /dxt/_search?q=name:张三
#响应
{
"took" : 0,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 1,
"relation" : "eq"
},
"max_score" : 0.28363907,
"hits" : [
{
"_index" : "dxt",
"_type" : "_doc",
"_id" : "1001",
"_score" : 0.28363907,
"_source" : {
"name" : "法内-张三",
"age" : "21",
"address" : "广州天河区",
"zhiye" : "法师"
}
}
]
}
}
区间查询 >= <=
GET /dxt/_search?q=age:>20
分页查询
from 起点 size 页数 类似 limit
GET /dxt/_search?q=name:张三&from=0&size=2
设置搜索后的展示字段
_source = 字段名称1,字段名称1
GET /dxt/_search?_source=name,age&q=name:张三
排序
GET /dxt/_search?sort=age:desc
结语
本章主要是一些简单的api应用,我们是直接操作的视化工具kibana去做的,后续在代码中去实现客户端,还会有更加复杂的查询操作,当然 ElasticSearch的强大功能还远远不止如此,接下来我和大家一起慢慢发掘~
我是 祥天 ,期望在提高自己的同时,输出较高质量的分享,感谢各位读者的:点赞、收藏和评论,我们一起加油~
|