1. #增加数据:
    2. POST users/_doc
    3. {
    4. "name":"redis",
    5. "age":29,
    6. "sex": "男"
    7. }
    8. #带主键, 如果主键不存在,则插入;反之,则更新
    9. POST users/_doc/1
    10. {
    11. "name": "李宇鸿",
    12. "age": 20,
    13. "sex": "男"
    14. }
    1. #更新操作:
    2. POST users/_doc/1
    3. {
    4. "name": "John Doe2"
    5. }
    6. POST users/_update/1
    7. {
    8. "doc": {
    9. "name": "lyh22"
    10. }
    11. }
    12. PUT users/_doc/1
    13. {
    14. "name": "Liyuhong"
    15. }
    1. #更新的同时增加属性:
    2. POST users/_update/1
    3. {
    4. "doc": {
    5. "name": "Jane Doe",
    6. "city": "合肥",
    7. "age": 20
    8. }
    9. }
    1. #批量操作:
    2. POST users/_doc/_bulk
    3. {"index":{"_id":"1"}}
    4. {"name":"John Doe"}
    5. {"index":{"_id":"2"}}
    6. {"name":"Jane Doe"}
    1. #查询DSL:
    2. GET bank/_search
    3. {
    4. "query": {
    5. "match_all": {}
    6. },
    7. "from": 0,
    8. "size": 3,
    9. "sort": [
    10. {
    11. "account_number": {
    12. "order": "asc"
    13. }
    14. }
    15. ]
    16. }
    1. #返回部分字段:
    2. GET bank/_search
    3. {
    4. "query": {
    5. "match_all": {}
    6. },
    7. "_source": ["age", "balance", "firstname"]
    8. }
    1. #match精确匹配查询
    2. GET bank/_search
    3. {
    4. "query": {
    5. "match": {
    6. "account_number": "20"
    7. }
    8. }
    9. }
    1. #字符串, 全文检索:
    2. GET bank/_search
    3. {
    4. "query": {
    5. "match": {
    6. "address": "mill"
    7. }
    8. }
    9. }
    1. #字符串,多个单词(分词+全文检索):
    2. GET bank/_search
    3. {
    4. "query": {
    5. "match": {
    6. "address": "mill road"
    7. }
    8. }
    9. }
    1. #将需要匹配的值当成一个整体单词(不分词)进行检索
    2. GET bank/_search
    3. {
    4. "query": {
    5. "match_phrase": {
    6. "address": "mill road"
    7. }
    8. }
    9. }
    1. #multi_match【多字段匹配】state或者address包含mill
    2. GET bank/_search
    3. {
    4. "query": {
    5. "multi_match": {
    6. "query": "625",
    7. "fields": [
    8. "account_number",
    9. "address"
    10. ]
    11. }
    12. }
    13. }
    1. #multi_match【多字段匹配】state或者address包含mill
    2. GET bank/_search
    3. {
    4. "query": {
    5. "multi_match": {
    6. "query": "625",
    7. "fields": [
    8. "account_number",
    9. "address"
    10. ]
    11. }
    12. }
    13. }
    1. #bool复合查询: 查出address MILL且是男性的
    2. GET bank/_search
    3. {
    4. "query": {
    5. "bool": {
    6. "must": [
    7. {
    8. "match": {
    9. "address": "MILL"
    10. }
    11. },
    12. {
    13. "match": {
    14. "gender": "M"
    15. }
    16. }
    17. ]
    18. }
    19. }
    20. }
    1. #should:应该达到should列举的条件,如果达到会增加相关文档的评分,并不会改变 查询的结果
    2. GET bank/_search
    3. {
    4. "query": {
    5. "bool": {
    6. "must": [
    7. {
    8. "match": {
    9. "address": "MILL"
    10. }
    11. },
    12. {
    13. "match": {
    14. "gender": "M"
    15. }
    16. }
    17. ],
    18. "should": [
    19. {
    20. "match": {
    21. "address": "lane"
    22. }
    23. }
    24. ]
    25. }
    26. }
    27. }
    1. #filter【结果过滤】:过滤出balance18000~20000之间
    2. GET bank/_search
    3. {
    4. "query": {
    5. "bool": {
    6. "must": [
    7. {
    8. "match": {
    9. "address": "Street"
    10. }
    11. }
    12. ],
    13. "filter": {
    14. "range": {
    15. "balance": {
    16. "gte": 18000,
    17. "lte": 20000
    18. }
    19. }
    20. }
    21. }
    22. },
    23. "from": 0,
    24. "size": 50
    25. }
    1. #全文检索字段用 match,其他非 text 字段匹配用 term
    2. GET bank/_search
    3. {
    4. "query": {
    5. "bool": {
    6. "must": [
    7. {
    8. "term": {
    9. "age": {
    10. "value": "28"
    11. }
    12. }
    13. },
    14. {
    15. "match": {
    16. "address": "990"
    17. }
    18. }
    19. ]
    20. }
    21. }
    22. }

    aggregations(聚合) 最简单的聚合方法大致等于SQL GROUP BY 和 SQL 聚合函数

    1. #先查出address中包含mill的, 在聚合分析出年龄分布,
    2. #以及年龄的平均值, size:0表示只显示聚合结果
    3. #ageAgg表示这次聚合的名字, terms是聚合的类型
    4. GET bank/_search
    5. {
    6. "query": {
    7. "match": {
    8. "address": "mill"
    9. }
    10. },
    11. "aggs": {
    12. "ageAgg": {
    13. "terms": {
    14. "field": "age",
    15. "size": 10
    16. }
    17. },
    18. "avg_agg": {
    19. "avg": {
    20. "field": "age"
    21. }
    22. }
    23. },
    24. "size": 0
    25. }
    1. #先按照年龄聚合, 再计算每个年龄段的人的平均薪资
    2. GET bank/_search
    3. {
    4. "query": {
    5. "match_all": {}
    6. },
    7. "aggs": {
    8. "ageAgg": {
    9. "terms": {
    10. "field": "age",
    11. "size": 1000,
    12. "order": {
    13. "_key": "asc"
    14. }
    15. },
    16. "aggs": {
    17. "balanceAgg": {
    18. "avg": {
    19. "field": "balance"
    20. }
    21. }
    22. }
    23. }
    24. }
    25. }
    1. #查出所有年龄分布,以及这些年龄段中男性的平均薪资
    2. #和女性的平均薪资以及这个年龄 段的总体平均薪资
    3. GET bank/_search
    4. {
    5. "query": {
    6. "match_all": {}
    7. },
    8. "aggs": {
    9. "ageAgg": {
    10. "terms": {
    11. "field": "age",
    12. "size": 100,
    13. "order": {
    14. "_key": "asc"
    15. }
    16. },
    17. "aggs": {
    18. "genderAgg": {
    19. "terms": {
    20. "field": "gender.keyword",
    21. "size": 100
    22. },
    23. "aggs": {
    24. "balanceAvg": {
    25. "avg": {
    26. "field": "balance"
    27. }
    28. }
    29. }
    30. },
    31. "balanceAvg": {
    32. "avg": {
    33. "field": "balance"
    34. }
    35. }
    36. }
    37. }
    38. }
    39. }

    Mapping 是用来定义一个文档(document),以及它所#包含的属性(field)是如何存储和 索引的

    1. GET my_index/_mapping
    2. #创建索引并指定映射
    3. PUT my_index
    4. {
    5. "mappings": {
    6. "properties": {
    7. "age": {
    8. "type": "integer"
    9. },
    10. "email": {
    11. "type": "keyword"
    12. },
    13. "name": {
    14. "type": "text"
    15. }
    16. }
    17. }
    18. }
    19. #添加新的字段映射
    20. PUT my_index/_mapping
    21. {
    22. "properties": {
    23. "employee-id": {
    24. "type": "keyword",
    25. "index": false
    26. }
    27. }
    28. }

    更新映射(对于已经存在的映射字段,我们不能更新。更新必须创建新的索引进行数据迁移)

    1. #source源索引数据, dest目标索引
    2. POST _reindex
    3. {
    4. "source": {
    5. "index": "users"
    6. },
    7. "dest": {
    8. "index": "userman"
    9. }
    10. }
    11. GET userman/_search
    12. POST _reindex
    13. {
    14. "source": {
    15. "index": "users",
    16. "type": "_doc"
    17. },
    18. "dest": {
    19. "index": "user_woman"
    20. }
    21. }
    22. GET user_woman/_search