ElasticSearch的基础说明
2025-02-23 13:45:06 0 举报
AI智能生成
ElasticSearch的基础功能说明
作者其他创作
大纲/内容
类似于mysql
index对应表
mapping对应表结构
document对应表数据
索引的基本操作
创建索引
PUT /index_name
PUT /index_name
{
"aliases": {
"myindex_alias": {} // 创建别名
},
"settings": {
// 索引设置
"number_of_shards": 1, // 分片数量
"number_of_replicas": 1 // 副本数量
},
"mappings": {
"properties": {
// 字段映射
"name": {
"type": "integer",
"null_value": 0
},
"age": {
"type": "integer"
},
"enrolled_date": {
"type": "date"
},
"address": {
"type": "text",
"analyzer": "ik_smart" //或者最大分词ik_max_word
}
}
}
}
{
"aliases": {
"myindex_alias": {} // 创建别名
},
"settings": {
// 索引设置
"number_of_shards": 1, // 分片数量
"number_of_replicas": 1 // 副本数量
},
"mappings": {
"properties": {
// 字段映射
"name": {
"type": "integer",
"null_value": 0
},
"age": {
"type": "integer"
},
"enrolled_date": {
"type": "date"
},
"address": {
"type": "text",
"analyzer": "ik_smart" //或者最大分词ik_max_word
}
}
}
}
删除索引
DELETE /index_name
修改索引
PUT /index_name/_settings
{
"index": {
"属性名": "属性值"
}
}
{
"index": {
"属性名": "属性值"
}
}
PUT /index_name/_mapping
{
"properties": {
"字段名": "字段值" // 这个字段可以是新字段,这样就会新增一个字段
}
}
{
"properties": {
"字段名": "字段值" // 这个字段可以是新字段,这样就会新增一个字段
}
}
查看索引
GET /index_name
添加别名
POST /_aliases
{
"actions": [
{
"add": {
"index": "my_index", // 需要添加别名的索引
"alias": "my_index_alias" // 该索引的别名名称
}
}
]
}
{
"actions": [
{
"add": {
"index": "my_index", // 需要添加别名的索引
"alias": "my_index_alias" // 该索引的别名名称
}
}
]
}
多个索引,可以命名为同一个别名,便于查询,几乎不影响效率
相同别名的索引,建议字段保持一致
查询
POST index_1,index_2,index_3/_search
POST index_*/_search
文档的基本操作
新增
不指定id,由ES自动生成:
POST /index_name/_doc
{
"字段名": "值",
"字段名2": "值2"
}
POST /index_name/_doc
{
"字段名": "值",
"字段名2": "值2"
}
会有幂等性问题,重复执行时,会重复插入同一条数据
指定id:
PUT /index_name/_doc/1
{
"字段名": "值",
"字段名2": "值2"
}
PUT /index_name/_doc/1
{
"字段名": "值",
"字段名2": "值2"
}
批量新增
POST /index_name/_bulk
POST /index_name/_bulk
修改
POST
更新时,可以只更新局部字段
POST /index_name/_update/{id}
{
"doc": {
"字段名": "xxx"
}
}
{
"doc": {
"字段名": "xxx"
}
}
POST /index_name/_update_by_query
{
"query": {
"match": {
"字段名": "xxx"
}
},
"script": {
"source": "ctx._source.field = 'new_value'"
}
}
{
"query": {
"match": {
"字段名": "xxx"
}
},
"script": {
"source": "ctx._source.field = 'new_value'"
}
}
高并发环境下,需要待上这两个参数,确保线程安全
POST /index_name/_doc/1?if_seq_no=XX&if_primary_term=YYY
{
"字段名": "值",
"字段名2": "值2"
}
POST /index_name/_doc/1?if_seq_no=XX&if_primary_term=YYY
{
"字段名": "值",
"字段名2": "值2"
}
PUT
更新时,会覆盖整个文档,所以要写全,否则没更新的字段会被移除
删除
DELETE /index_name/_doc/{id}
DELETE /index_name/_delete_by_query
{
"query": {
"match": {
"字段名": "xxx"
}
}
}
{
"query": {
"match": {
"字段名": "xxx"
}
}
}
批量操作
批量创建
POST _bulk
{"create":{"_index":"article","_id":3}}
{"id":3,"title":"xxx","tags":["xxx","yyy"],...}
{"create":{"_index":"article","_id":4}}
{"id":4,"title":"xxx","tags":["xxx","yyy"],...}
POST _bulk
{"create":{"_index":"article","_id":3}}
{"id":3,"title":"xxx","tags":["xxx","yyy"],...}
{"create":{"_index":"article","_id":4}}
{"id":4,"title":"xxx","tags":["xxx","yyy"],...}
批量新建或替换
POST _bulk
{"index":{"_index":"article","_id":3}}
{"id":3,"title":"xxx","tags":["xxx","yyy"],...}
{"index":{"_index":"article","_id":4}}
{"id":4,"title":"xxx","tags":["xxx","yyy"],...}
POST _bulk
{"index":{"_index":"article","_id":3}}
{"id":3,"title":"xxx","tags":["xxx","yyy"],...}
{"index":{"_index":"article","_id":4}}
{"id":4,"title":"xxx","tags":["xxx","yyy"],...}
批量更新
POST _bulk
{"update":{"_index":"article","_id":3}}
{"id":3,"title":"xxx","tags":["xxx","yyy"],...}
{"update":{"_index":"article","_id":4}}
{"id":4,"title":"xxx","tags":["xxx","yyy"],...}
POST _bulk
{"update":{"_index":"article","_id":3}}
{"id":3,"title":"xxx","tags":["xxx","yyy"],...}
{"update":{"_index":"article","_id":4}}
{"id":4,"title":"xxx","tags":["xxx","yyy"],...}
批量删除
POST _bulk
{"delete":{"_index":"article","_id":3}}
{"delete":{"_index":"article","_id":4}}
POST _bulk
{"delete":{"_index":"article","_id":3}}
{"delete":{"_index":"article","_id":4}}
也可以将上面的几个组合使用
查询
GET /index_name/_doc/{id}
GET /index_name/_mget
{
"ids": ["1","2","3"]
}
{
"ids": ["1","2","3"]
}
精确匹配
GET /index_name/_search
{
"query": {
"term": {
"name": "xxx"
}
}
}
GET /index_name/_search
{
"query": {
"term": {
"name": "xxx"
}
}
}
全文检索
GET /index_name/_search
{
"query": {
"match": {
"name": "xxx"
}
}
}
GET /index_name/_search
{
"query": {
"match": {
"name": "xxx"
}
}
}
范围检索
GET /index_name/_search
{
"query": {
"range": {
"age": {
"gte": 1,
"lte": 10
}
}
}
}
GET /index_name/_search
{
"query": {
"range": {
"age": {
"gte": 1,
"lte": 10
}
}
}
}
组合查询
GET /index_name/_search
{
"query": {
"bool": {
"must": [
{"match": {"字段名1": "xxx"}},
{"match": {"字段名2": "yyy"}},
]
}
}
}
GET /index_name/_search
{
"query": {
"bool": {
"must": [
{"match": {"字段名1": "xxx"}},
{"match": {"字段名2": "yyy"}},
]
}
}
}
如何处理关联关系
嵌套对象
type: "nested"
更新时,父子都要更新
join父子文档
type: "join"
尽量避免,效率太低了
宽表冗余
业务端关联(分多次查询)
注意事项
尽量避免模糊匹配,尤其是前缀模糊
避免存储null
最好在mapping中加入_mate信息,例如版本号

收藏
0 条评论
下一页