在Elasticsearch中,提供了功能丰富的RESTful API的操作,包括基本的CRUD、创建索引、删除索引等操作。

1.创建非结构化索引

在Lucene中,创建索引是需要定义字段名称以及字段的类型的,在Elasticsearch中提供了非结构化的索引,就是不需要创建索引结构,即可写入数据到索引中,实际上在Elasticsearch底层会进行结构化操作,此操作对用户是透明的。
创建空索引:

  1. PUT /haoke
  2. {
  3. "settings": {
  4. "index": {
  5. "number_of_shards": "2",
  6. "number_of_replicas": "0"
  7. }
  8. }
  9. }
  10. 返回:
  11. {
  12. "acknowledged": true,
  13. "shards_acknowledged": true,
  14. "index": "haoke"
  15. }

2.插入数据

语法:
POST /{索引}/{类型}/{id}
{

数据

}

  1. POST /haoke/user/1001
  2. {
  3. "id":1001,
  4. "name":"zhangsan",
  5. "age":20,
  6. "sex":"男"
  7. }

返回:

  1. {
  2. "_index": "haoke",
  3. "_type": "user",
  4. "_id": "1001",
  5. "_version": 1,
  6. "result": "created",
  7. "_shards": {
  8. "total": 1,
  9. "successful": 1,
  10. "failed": 0
  11. },
  12. "_seq_no": 0,
  13. "_primary_term": 1
  14. }

04 RESTFul API - 图1
说明: 非结构化的索引,不需要事先创建,直接插入数据,就会默认创建索引
不指定id插入数据:

  1. POST /haoke/user/
  2. {
  3. "id":1002,
  4. "name":"zhangsan",
  5. "age":20,
  6. "sex":"男"
  7. }
  8. 返回:
  9. {
  10. "_index": "haoke",
  11. "_type": "user",
  12. "_id": "iMYWbW4BeGrcgRMuEDq3",
  13. "_version": 1,
  14. "result": "created",
  15. "_shards": {
  16. "total": 1,
  17. "successful": 1,
  18. "failed": 0
  19. },
  20. "_seq_no": 1,
  21. "_primary_term": 1
  22. }

会自动生成id
04 RESTFul API - 图2

3.更新数据

在ElasticSearch中,文档数据是不能修改的,但是可以通过覆盖的方式进行更新。

  1. PUT /haoke/user/1001
  2. {
  3. "id":1001,
  4. "name":"张三",
  5. "age":21,
  6. "sex":"女"
  7. }

更新结果如下:
04 RESTFul API - 图3
04 RESTFul API - 图4
可以看出,是覆盖的形式:
04 RESTFul API - 图5
04 RESTFul API - 图6
局部更新:
原理:从旧文档中检索json,修改它,删除旧文档,索引新文档

  1. POST /haoke/user/1001/_update
  2. {
  3. "doc": {
  4. "age":55
  5. }
  6. }

04 RESTFul API - 图7

4.删除数据

  1. DELETE /haoke/user/1001

04 RESTFul API - 图8
注:删除一个文档也不会立即从磁盘上移除,它只是被标记为已删除。ElasticSearch将会在你之后添加更多索引的时候才会在后台进行删除内容的清理。

5.搜索数据

1) 根据id搜索数据

  1. GET /haoke/user/isZfHW8BeGrcgRMuqzpQ
  2. # 返回的数据如下
  3. {
  4. "_index": "haoke",
  5. "_type": "user",
  6. "_id": "isZfHW8BeGrcgRMuqzpQ",
  7. "_version": 2,
  8. "found": true,
  9. "_source": { # 原始数据在这里
  10. "age": 123,
  11. "name": "李四",
  12. "sex": 0
  13. }
  14. }

2) 搜索全部数据

  1. GET /haoke/user/_search
  2. # 返回的数据如下
  3. {
  4. "took": 2,
  5. "timed_out": false,
  6. "_shards": {
  7. "total": 2,
  8. "successful": 2,
  9. "skipped": 0,
  10. "failed": 0
  11. },
  12. "hits": {
  13. "total": 2,
  14. "max_score": 1,
  15. "hits": [
  16. {
  17. "_index": "haoke",
  18. "_type": "user",
  19. "_id": "i8ZcIW8BeGrcgRMuuToO",
  20. "_score": 1,
  21. "_source": {}
  22. },
  23. {
  24. "_index": "haoke",
  25. "_type": "user",
  26. "_id": "isZfHW8BeGrcgRMuqzpQ",
  27. "_score": 1,
  28. "_source": {
  29. "age": 123,
  30. "name": "李四",
  31. "sex": 0
  32. }
  33. }
  34. ]
  35. }
  36. }

3) 关键字搜索数据

  1. #查询年龄等于123的用户
  2. GET /haoke/user/_search?q=age:123
  3. # 返回的数据如下
  4. {
  5. "took": 3,
  6. "timed_out": false,
  7. "_shards": {
  8. "total": 2,
  9. "successful": 2,
  10. "skipped": 0,
  11. "failed": 0
  12. },
  13. "hits": {
  14. "total": 1,
  15. "max_score": 1,
  16. "hits": [
  17. {
  18. "_index": "haoke",
  19. "_type": "user",
  20. "_id": "isZfHW8BeGrcgRMuqzpQ",
  21. "_score": 1,
  22. "_source": {
  23. "age": 123,
  24. "name": "李四",
  25. "sex": 0
  26. }
  27. }
  28. ]
  29. }
  30. }

6.DSL搜索

ElasticSearch提供丰富且灵活的查询语言叫做DSL查询(Query DSL),它允许你构建更加复杂、强大的查询
DSL(Domain Specific Language特定领域语言)以JSON请求体的形式出现

  1. GET[POST] /haoke/user/_search
  2. {
  3. "query": {
  4. "match": {
  5. "age": "123"
  6. }
  7. }
  8. }

04 RESTFul API - 图9
当前数据:
04 RESTFul API - 图10

  1. POST /haoke/user/_search
  2. {
  3. "query": {
  4. "bool": {
  5. "filter": {
  6. "range": {
  7. "age": {
  8. "gte": 30
  9. }
  10. }
  11. },
  12. "must":{
  13. "match":{
  14. "sex":"male"
  15. }
  16. }
  17. }
  18. }
  19. }

04 RESTFul API - 图11

  1. POST /haoke/user/_search
  2. {
  3. "query": {
  4. "match": {
  5. "name": "路飞 nami"
  6. }
  7. }
  8. }

04 RESTFul API - 图12

7.高亮显示

  1. POST /haoke/user/_search
  2. {
  3. "query": {
  4. "match": {
  5. "name": "路飞 nami"
  6. }
  7. },
  8. "highlight":{
  9. "fields": {
  10. "name":{}
  11. }
  12. }
  13. }

04 RESTFul API - 图13

8.集合

在Elasticsearch中,支持聚合操作,类似SQL中的group by操作。

  1. POST /haoke/user/_search
  2. {
  3. "aggs": {
  4. "all_interests": {
  5. "terms": {
  6. "field": "age"
  7. }
  8. }
  9. }
  10. }

04 RESTFul API - 图14