本文共 2459 字,大约阅读时间需要 8 分钟。
Elasticsearch(简称ES)是一种基于分布式的搜索引擎,能够对结构化数据进行高效的存储和检索。与传统数据库(如MySQL、PostgreSQL等)相比,ES具有更高的灵活性和扩展性。以下将从基本结构、数据存储对比以及操作方式等方面详细阐述ES的特点,并结合实际案例说明增删改查操作过程。
以下是传统数据库和Elasticsearch之间的主要对比:
| 传统数据库 | Elasticsearch |
|---|---|
| 数据库 | index |
| 表 | type |
| 字段 | id |
| 记录 | 文档 |
传统数据库存储以行为单位,而Elasticsearch则以文档为单位存储数据:
| 传统数据库 | Elasticsearch |
|---|---|
| varchar字符串、int整数等类型的字段组成的一行行记录 | JSON格式的文档 |
传统数据库主要通过SQL语句进行操作,而Elasticsearch则采用基于RESTful风格的域名式语言(DSL)。以下是两者的对比:
| 传统数据库 | Elasticsearch |
|---|---|
| SQL语句 | Restful风格的DSL |
以下将通过一个学校的实际案例,说明如何在Elasticsearch中进行增删改查操作。
添加一条新数据记录,可以通过以下方式实现:
POST http://[IP地址]:9200/[index名]/[type名]/[documentID]
例如,添加一班的小红(直接带id式插入):
POST http://[IP地址]:9200/school/class_1/xiaohong{ "name": "小红", "age": 18, "height": 165, "tags": ["学习认真", "学霸", "漂亮"]} 如果不带id,系统会自动生成一个唯一的id。
添加的小白用于后续删除:
POST http://[IP地址]:9200/school/class_1/xiaobai{ "name": "小白", "age": 18, "height": 165} 删除一条数据记录可以通过以下方式实现:
DELETE http://[IP地址]:9200/school/class_1/xiaobai
删除成功后,可以从结果中查看到记录已被删除。
修改数据可以分为两种情况:
1. 全部修改:通过PUT请求替换整个文档:
PUT http://[IP地址]:9200/school/class_1/xiaohong{ "name": "小红", "age": 19, "height": 170, "tags": ["学习认真", "学霸", "漂亮"]} 2. 部分修改:通过POST请求更新特定字段:
POST http://[IP地址]:9200/school/class_1/xiaohong/_update{ "doc": { "age": 20 }} 查询所有数据可以通过以下方式实现:
GET http://[IP地址]:9200/school/class_1/_search
查询结果如下:
{ "hits": [ { "_source": { "name": "小红", "age": 20, "height": 170, "tags": ["学习认真", "学霸", "漂亮"] } }, { "_source": { "name": "无名", "age": 17, "height": 175, "tags": ["学习认真", "学霸"] } }, { "_source": { "name": "小李", "age": 22, "height": 176, "tags": ["调皮", "学渣"] } } ]} 查询年龄在18及以上的同学可以使用以下查询:
POST http://[IP地址]:9200/school/class_1/_search{ "query": { "bool": { "filter": [ { "range": { "age": { "gte": 18 } } } ] } }, "size": 10} Elasticsearch提供了丰富的查询和聚合功能,可以通过合理的查询策略提高搜索效率。常用的查询包括:
1. 匹配某字段等于某个值:
{ "term": { "name": "小红" }} 2. 匹配某字段多个值:
{ "terms": ["小红", "小白"]} 3. 范围筛选:
{ "range": { "age": { "gte": 18 } }} 4. 时间范围筛选:
{ "range": { "finished_time": { "gt": "now-1d" } }} 5. 时间聚合分桶:
{ "aggs": { "my_date_buckets": { "date_histogram": { "field": "finished_time", "fixed_interval": "10m" } } }} 通过上述方法,可以对数据进行精确的查询和高效的聚合分析。
转载地址:http://yfiu.baihongyu.com/