elasticsearch简单使用总结
1、ELK的安装的准备
1.1 ELK的下载地址
ElasticSearch: https://mirrors.huaweicloud.com/elasticsearch/?C=N&O=D
logstash: https://mirrors.huaweicloud.com/logstash/?C=N&O=D
可视化界面elasticsearch-head.https://github.com/mobz/elasticsearch-head
kibana: https://mirrors.huaweicloud.com/kibana/?C=N&O=D
ik分词器 https://github.com/medcl/elasticsearch-analysis-ik
1.1 elk安装 参考
https://blog.csdn.net/mgdj25/article/details/105740191
这边说下基本要做的
-
kibana的国际化设置 yml中设置成zh-CN
-
es下的yml文件添加跨域
http.cors.enabled: true http.cors.allow-origin: "*"
这边特别提醒一下分词的粒度设置,比如一个分词只是将一个词的单体拆分,“李逵哈哈”,可能只是将李逵两个都分开了,并没有分成“李逵”这个词,那就要自己去写字典了
在ik分词下的config目录下新增一个 “cyx.dic”
把自己的dic 添加到配置中 IKAnalyzer.cfg.xml中
增加一个(里面很多用法 都有注释)
<!-- 用户可以在这扩展自己的用户字典--> <entry key="ext_dict">cyx.dic</entry>
1.2 ES核心概念
集群,节点,索引,类型,文档,分片,映射是什么?
DB | Elasticsearch |
---|---|
数据库(database) | 索引(indices) |
表(tables) | types |
行(rows) | documents |
字段(columns) | fields |
如果要使用中文,建议使用ik分词器!
IK提供了两个分词算法: ik_ smart和ik_ max_ word ,其中ik_ smart为最少切分, ik_ max_ _word为最细粒度划分!一会我们测试!
分词 粗粒度
GET _analyze
{
"analyzer":"ik_smart",
"text":"我是社会主义接班人"
}
分词 细粒度
GET _analyze
{
"analyzer":"ik_max_word",
"text":"我是社会主义接班人"
}
命令模式的使用
method | url地址 | 描述 |
---|---|---|
PUT | localhost:9200/索引名称/类型名称/文档id | 创建文档(指定文档id) |
POST | localhost:9200/索引名称/类型名称 | 创建文档(随机文档id) |
POST | localhost:9200/索引名称/类型名称/文档id/_update | 修改文档 |
DELETE | localhost:9200/索引名称/类型名称/文档id | 删除文档 |
GET | localhost:9200/索引名称/类型名称/文档id | 通过文档id查询文档 |
POST | localhost:9200/索引名称/类型名称/_search | 查询所有的数据 |
#创建索引
PUT /索引名/类型名/文档
PUT /lisen/type1/1
#获取索引
GET /lisen/type1/1
#获取索引信息
GET /test2
获取健康值
GET _cat/health
获取所有信息
GET _cat/indices?v
修改
PUT /lisen/type1/1
{
"name":"王五",
"age":"30"
}
GET /lisen/type1/1
创建test2
GET /test2
PUT /test2/_doc/1
{
"name":"张三",
"age":"18",
"birthdya":"2020-08-11"
}
GET /test2/_doc/1
PUT /test2/_doc/2
{
"name":"李四",
"age":"20",
"birthdya":"2021-09-11"
}
POST /test2/_doc/_search
POST /test2/_doc/1/_update
{
"doc":{
"name":"法外狂徒张三"
}
}
POST /test2/_doc/1
{
"doc":{
"name":"张三三"
}
}
GET /test2/_doc/1
DELETE /test2/_doc/1
PUT /test2/_doc/1
{
"name" : "张阿三",
"age" : "20",
"birthdya" : "2021-09-11"
}
PUT /test2/_doc/3
{
"name" : "李阿四",
"age" : "20",
"birthdya" : "2021-09-11"
}
PUT /test2/_doc/4
{
"name" : "王阿五",
"age" : "20",
"birthdya" : "2021-09-11"
}
POST /test2/_doc/_search
GET /test2/_doc/_search?q=name:阿1
使用keyword不分词
POST /test3/user
{
"mappings":{
"properties":{
"name":{
"type":"keyword"
}
}
}
}
GET /test3
DELETE /test3
GET _cat/health
GET _cat/indices?v
PUT /test3
{
"mappings": {
"properties":{
"name":{
"type":"keyword"
},
"address":{
"type":"keyword"
},
"age":{
"type":"integer"
}
}
}
}
PUT /test3/_doc/1
{
"name":"张三",
"address":"天津",
"age":19
}
PUT /test3/_doc/2
{
"name":"李三",
"address":"天津",
"age":19
}
PUT /test3/_doc/3
{
"name":"王三",
"address":"天津",
"age":19
}
PUT /test3/_doc/3
{
"name":"三分",
"address":"天津",
"age":19
}
GET /test3/_doc/_search?q=name:三分
GET /test3/_doc/_search?q=name:三分 and address:天津
包含
GET test2/_doc/_search
{
"query":{
"match":{
"name":"阿三"
}
}
}
GET test2/_doc/_search
{
"query":{
"match":{
"name":"阿三"
}
},
"_source":["name","age"]
}
不包含
GET test2/_doc/_search
{
"query":{
"match":{
"name":"阿三"
}
},
"_source":{"excludes":["name","age"]}
}
排序
# 修改age的值,用于排序
POST test2/_doc/2/_update
{
"doc":{
"age":21
}
}
POST test2/_doc/3/_update
{
"doc":{
"age":22
}
}
POST test2/_doc/4/_update
{
"doc":{
"age":23
}
}
GET test2/_doc/_search
{
"query":{
"match":{
"name":"阿"
}
},
"sort":{
"age":{
"order":"desc"
}
}
}
分页
GET /test2/_doc/_search
{
"sort":{
"age":{
"order":"desc"
}
},
"from":0,
"size":2
}
多条件 must(and),所有的条件都要符合
GET /test2/_doc/_search
{
"query":{
"bool":{
"must":[
{
"match":{
"name":"阿"
}
},
{
"match":{
"age":23
}
}
]
}
}
}
或 should (or) 跟数据库一样
GET /test2/_doc/_search
{
"query":{
"bool":{
"should":[
{
"match":{
"name":"阿"
}
},
{
"match":{
"age":22
}
}
]
}
}
}
排除
GET /test2/_doc/_search
{
"query":{
"bool":{
"must_not":[
{
"match":{
"name":"阿"
}
}
]
}
}
}
区间
GET /test2/_doc/_search
{
"query":{
"bool":{
"must":[
{
"match":{
"name":"阿"
}
}
],
"filter":{
"range":{
"age":{
"gte":10,
"lte":30
}
}
}
}
}
}
通配符
GET /test2/_doc/_search
{
"query":{
"wildcard":{
"name":{
"value":"张*"
}
}
}
}
多id查询
GET /test2/_doc/_search
{
"query":{
"ids":{
"values":["1","2","3"]
}
}
}
GET /test2
测试keyword是否分词
PUT lisendb
{
"mappings":{
"properties":{
"name":{
"type": "text"
},
"content":{
"type":"keyword"
}
}
}
}
PUT lisendb/_doc/1
{
"name":"尼尔",
"content":"呜哈哈212"
}
PUT lisendb/_doc/2
{
"name":"李毅",
"content":"哈哈少儿"
}
GET _analyze
{
"analyzer":"standard",
"text":"士大夫撒"
}
GET _analyze
{
"analyzer":"keyword",
"text":"士大夫撒"
}
GET lisendb/_search
{
"query":{
"bool":{
"should":[
{
"term":{
"name":"李"
}
},
{
"term":{
"name":"尔"
}
}
]
}
}
}
高亮
GET lisendb/_search
{
"query":{
"bool":{
"should": [
{
"term":{
"name":"李"
}
},
{
"term":{
"name":"尼"
}
}
]
}
},
"highlight": {
"pre_tags": "<a class='haha'>", #高亮样式
"post_tags": "</a>",
"fields": {
"name":{}
}
}
}