Elasticsearch7.15.2 基础概念和基础语法
原创
©著作权归作者所有:来自51CTO博客作者gblfy的原创作品,请联系作者获取转载授权,否则将追究法律责任
文章目录
一、基础概念
1. ES是什么?
独立的网络上的一个或自足进程节点
对外提供搜索服务(http、transport协议)
对内就是一个搜索数据库
2. 名词定义
Elasticsearch也是基于Lucene的全文检索库,本质也是存储数据,很多概念与MySQL类似的。
3. 对应关系
Relation databases
| es7
|
Databases数据库
| index索引值得是数据库结构
|
Row 行
| document文档
|
Column 列
| Field
|
Schema
| Mapping
|
Index索引
| Ecerything indexed 所有的字段都可以来做索引
|
SQL
| Query DSL
|
SELECT * FROM table
| GET http://…
|
UPDATE FROM table
| PUT http:// …
|
4. 索引
搜索中的数据库或表定义
构建文档时候的索引创建
5. 分词
搜索十一分词为单位做基本的搜索单元
依靠分词器构建分词
用分词构建倒排索引
用户搜索的时候,搜索对应的分词器,分出的一个token之后,再和索引中存储的分词,找到我们想要的文档。
二、基础概念
2.1. 索引创建
# ------------------非结构化方式-----------------
# 创建一个索引
PUT /test
{
"settings" : {
"number_of_shards" : 1,
"number_of_replicas" : 1
}
}
# 分布式节点创建
# 更新其replicas状态,但是不能更新shards状态
PUT /test/_settings
{
"settings" : {
"number_of_replicas" : 0
}
}
# 创建索引,指定id建立索引
PUT /employee/_doc/1
{
"name": "凯杰",
"age": 30
}
# 不指定id建立索引
POST /employee/_doc/
{
"name": "dsfsfsf",
"age": 30
}
# 指定_create防止重复创建
POST /employee/_create/1/
{
"name": "凯1213132杰",
"age": 30
}
# 结构化创建
PUT /employee/
{
"settings" : {
"number_of_shards" : 1,
"number_of_replicas" : 1
},
"mappings" : {
"properties" : {
"name" : { "type" : "text" },
"age" : { "type" : "integer" }
}
}
}
2.2. 索引/文档删除
# 删除文档
DELETE /employee/_doc/1
# 删除索引
2.3. 索引修改
# 指定id全量修改索引
PUT /employee/_doc/1
{
"name": "凯dsfsf32杰",
"age":22
}
# 指定id部分字断修改
POST employee/_update/1
{
"doc" : {
"name" : "new_name"
}
}
三、ES 查询
3.1. 简单查询
# 查询全部
GET /employee/_search
# 根据主键id查询索引
3.2. 分页查询
GET /employee/_search
{
"query":{
"match_all": {}
},
"from":1,
"size":1
}
3.3. 复杂查询
GET /employee/_search
{
"query":{
"match": {"name":"ES"}
}
}
GET /employee/_search
{
"query":{
"match": {"name":"ES"}
},
"sort":[
{"age":{"order":"desc"}}
]
}
GET /employee/_search
{
"query":{
"match": {"name":"ES"}
},
"sort":[
{"age":{"order":"desc"}}
],
"aggs":{
"group_by_age":{
"terms":{
"field":"age"
}
}
}
}
四、利用analyze api搜索
4.1. 索引创建
PUT /employee/_doc/1
{
"name": "Eating an apple a day & keeps the doctor away",
"age": 30
}
4.2. 索引查询
GET /employee/_search
{
"query":{
"match": {"name":"eat"}
}
}
4.3. 分词结果
没搜到后使用analyze api查看分析处理结果,可以看到没有分出eat。
GET /employee/_analyze
{
"field":"name",
"text":"Eating an apple a day & keeps the doctor away"
}
可以看到没有分出eat,所以搜不到,改成用english分词器做
4.4. 索引重新创建
PUT /employee=
{
"settings" : {
"number_of_shards" : 1,
"number_of_replicas" : 1
},
"mappings" : {
"properties" : {
"name" : { "type" : "text","analyzer": "english"},
"age" : {"type":"integer"}
}
}
}
4.5. 索引查询
在用analyze api,可以看到eat
GET /employee/_analyze
{
"field":"name",
"text":"Eating an apple a day & keeps the doctor away"
}