Elasticsearch7.15.2 基础概念和基础语法_基础概念


Elasticsearch7.15.2 基础概念和基础语法_基础语法_02

文章目录

一、基础概念
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. 分词

搜索十一分词为单位做基本的搜索单元

依靠分词器构建分词

用分词构建倒排索引

Elasticsearch7.15.2 基础概念和基础语法_搜索_03


用户搜索的时候,搜索对应的分词器,分出的一个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"
}