• (Rest风格API)Elasticsearch索引操作、映射配置、数据操作、查询操作


    一、索引操作

    1.使用kibana创建索引

    1.请求方式:put

    2.请求路径:索引库名

    3.请求参数:json格式

    1. put book
    2. {
    3.   "settings":{
    4.     "number_of_shards":1, /*分片数量*/
    5.     "number_of_replicas":0 /*副本数量*/
    6.   }
    7. }

    1. number_of_shards 是指索引要做多少个分片,只能在创建索引时指定,后期无法修改。
    2. number_of_replicas 是指每个分片有多少个副本,后期可以动态修改
    3. 什么是分片?

    ES中所存数据的文件块,也是数据的最小单元块。假如有2个分片,插入10条数据,默认,每个分片存5条。

    2.查看索引:get请求

    get 索引库名

    我们可以使用*来查询所有索引库

    3.删除索引:delete请求

    delete 索引库名

    二、映射配置

    1.创建映射关系

    1. PUT /索引库名/_mapping/类型名称
    2. {
    3. "properties": {
    4. "字段名": {
    5. "type": "类型",
    6. "index": true
    7. "store": true
    8. "analyzer": "分词器"
    9. }
    10. }
    11. }

    1. 类型名称:基本概念中所说的type,类似于数据库中的表
      1. 字段名:类似于数据库中的列名。
        1. type:类型,可以是text、keyword、long、short、date、integer、object等
        2. index:是否索引,默认为true
        3. store:是否存储,默认为false
        4. analyzer:分词器,这里的`ik_max_word`即使用ik分词器

    实例

    1. /* 1.先创建索引 */
    2. put czxy
    3. /* 2.创建映射关系 */
    4. put czxy/_mapping/book
    5. {
    6. "properties": {
    7. "title": {
    8. "type": "text",
    9. "analyzer": "ik_max_word"
    10. },
    11. "images": {
    12. "type": "keyword",
    13. "index": "false"
    14. },
    15. "price": {
    16. "type": "float"
    17. }
    18. }
    19. }

    2.查看映射关系

    GET /索引库名/_mapping

    3.字段属性详解

    (1)type

    1. Elasticsearch中支持的数据类型非常丰富
      1. String类型,又分两种:
        1. text修饰字符串,默认进行分词,并生成索引。不能用来过滤、排序和聚合等操作。
        2. keyword修饰字符串,不会分词,不会建立索引。常常被用来过滤、排序和聚合。
      2. Numerical:数值类型,分两类
        1. 基本数据类型:long、interger、short、byte、double、float、half_float
        2. 浮点数的高精度类型:scaled_float
        3. 需要指定一个精度因子,比如10或100。elasticsearch会把真实值乘以这个因子后存储,取出时再还原。
      3. Date:日期类型
        1. elasticsearch可以对日期格式化为字符串存储,但是建议我们存储为毫秒值,存储为long,节省空间。

    (2)index

    index影响字段的索引情况。

    1. true:字段会被索引,则可以用来进行搜索。默认值就是true
    2. false:字段不会被索引,不能用来搜索

    index的默认值就是true,也就是说你不进行任何配置,所有字段都会被索引。

    但是有些字段是我们不希望被索引的,比如商品的图片信息,就需要手动设置index为false。

    (3)store

    是否将数据进行额外存储。

    Elasticsearch在创建文档索引时,会将文档中的原始数据备份,保存到一个叫做`_source`的属性中。而且我们可以通过过滤`_source`来选择哪些要显示,哪些不显示。

    而如果设置store为true,就会在`_source`以外额外存储一份数据,多余,因此一般我们都会将store设置为false,事实上,**store的默认值就是false。**

    三、数据操作

    1.添加数据

    语法:没有id

    POST _index/_type/

    {

      "属性": "值",

      ....

    }

    实例

    1. POST czxy/book/
    2. {
    3. "title": "标题",
    4. "price": 1234
    5. }

    2.添加或更新数据

    语法:数据存在更新;如果不存在添加(指定id)

    PUT _index/_type/_id

    {

      "属性": "值",

      ....

    }

    实例

    1. PUT czxy/book/b001
    2. {
    3.   "title": "标题123",
    4.   "price": 1234
    5. }

    3.删除数据

    语法:DELETE _index/_type/_id

    实例:DELETE czxy/book/b001

    四、查询操作

    1.简单查询

    指定id查询:GET czxy/book/b001

    指定id查询,检索指定内容:GET czxy/book/b001?_source=title,price

    2.高级查询

    (1)准备数据

    1. PUT czxy2
    2. PUT czxy2/_mapping/user
    3. {
    4. "properties": {
    5. "username": {
    6. "type": "text",
    7. "analyzer": "ik_max_word"
    8. },
    9. "city": {
    10. "type": "keyword"
    11. },
    12. "age": {
    13. "type": "float"
    14. }
    15. }
    16. }
    17. PUT czxy2/user/u001
    18. {
    19. "username": "张三",
    20. "city": "山西",
    21. "age": 18
    22. }
    23. PUT czxy2/user/u002
    24. {
    25. "username": "张四",
    26. "city": "山东",
    27. "age": 20
    28. }
    29. PUT czxy2/user/u003
    30. {
    31. "username": "张三三",
    32. "city": "山东",
    33. "age": 22
    34. }

    (2)查询所有(match_all:检索所有的数据)

    1. GET _search
    2. {
    3. "query": {
    4. "match_all": {}
    5. }
    6. }

    (3)查询指定索引的所有

    1. GET czxy2/_search
    2. {
    3. "query": {
    4. "match_all": {}
    5. }
    6. }

    (4)查询部分结果

    1. GET czxy2/_search
    2. {
    3. "query": {
    4. "match_all": {}
    5. },
    6. "_source": ["username","city"]
    7. }

    (5)条件查询:匹配查询

    1. GET czxy2/_search
    2. {
    3. "query": {
    4. "match": {
    5. "username": "张三"
    6. }
    7. }
    8. }

    (6)条件查询:复合查询(多条件查询)

    1.bool:多条件拼接

    2.must:必须

    3.must_not:不含

    4.should:可有可无

    1. GET czxy2/_search
    2. {
    3. "query": {
    4. "bool": {
    5. "must": [
    6. {
    7. "match": {
    8. "city": "山东"
    9. }
    10. }
    11. ],
    12. "must_not": [
    13. {
    14. "match": {
    15. "age": 22
    16. }
    17. }
    18. ]
    19. }
    20. }
    21. }

    (7)should并集查询

    注意:must和should同时存在的时候,should将会变得不起作用

    1. GET czxy2/_search
    2. {
    3. "query": {
    4. "bool": {
    5. "should": [
    6. {
    7. "match": {
    8. "city": "山东"
    9. }
    10. },
    11. {
    12. "match": {
    13. "city": "山西"
    14. }
    15. }
    16. ]
    17. }
    18. }
    19. }

    (8)精确匹配

    term 进行精确匹配(数据要求:数字、日期、布尔、not_analyzed的字符串(未分词))

    1. GET czxy2/_search
    2. {
    3. "query": {
    4. "term": {
    5. "age": 22
    6. }
    7. }
    8. }

    (9)范围查询

    range 用于确定范围,gt 大于、lt 小于、gte大于等于、lte小于等于

    1. GET czxy2/_search
    2. {
    3. "query": {
    4. "range": {
    5. "age": {
    6. "gte": 19,
    7. "lte": 21
    8. }
    9. }
    10. }
    11. }

    (10)排序

    1. GET czxy2/_search
    2. {
    3. "query": {
    4. "match_all": {}
    5. },
    6. "sort": [
    7. {
    8. "age": {
    9. "order": "desc"
    10. }
    11. }
    12. ]
    13. }

    (11)分页查询

    from 设置索引号,从0开始

    size 设置每页个数

    1. GET czxy2/_search
    2. {
    3. "query": {
    4. "match_all": {}
    5. },
    6. "from": 0,
    7. "size": 1
    8. }

  • 相关阅读:
    面试题库(五):并发编程
    鹰潭恒温恒湿实验室设计方案总结
    jmeter(二):jmeter组件总结,利用取样器中http发送请求
    【ArcGIS】11 河道断面提取
    MySQL函数
    电子学会2022年6月青少年软件编程(图形化)等级考试试卷(一级)
    Python教程——多线程
    大都会人寿线下培训第九天-通关了
    【数据结构】队列和栈
    【Java】泛型擦除机制
  • 原文地址:https://blog.csdn.net/weixin_64941496/article/details/137275752