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