• Elasticsearch查询


    说明

    ​ ES中提供了一种强大的检索数据方式,这种检索方式称之为Query DSL ,Query DSL是利用Rest API传递JSON格式的请求体(Request Body)数据与ES进行交互,这种方式的丰富查询语法让ES检索变得更强大,更简洁

    语法

    # GET /索引名/_doc/_search {json格式请求体数据}
    # GET /索引名/_search {json格式请求体数据}
    
    • 1
    • 2
    • 测试数据
    # 1.创建索引 映射
    PUT /products/
    {
      "mappings": {
        "properties": {
          "title":{
            "type": "keyword"
          },
          "price":{
            "type": "double"
          },
          "created_at":{
            "type":"date"
          },
          "description":{
            "type":"text"
          }
        }
      }
    }
    # 2.测试数据
    PUT /products/_doc/_bulk
    {"index":{}}
      {"title":"iphone12 pro","price":8999,"created_at":"2020-10-23","description":"iPhone 12 Pro采用超瓷晶面板和亚光质感玻璃背板,搭配不锈钢边框,有银色、石墨色、金色、海蓝色四种颜色。宽度:71.5毫米,高度:146.7毫米,厚度:7.4毫米,重量:187克"}
    {"index":{}}
      {"title":"iphone12","price":4999,"created_at":"2020-10-23","description":"iPhone 12 高度:146.7毫米;宽度:71.5毫米;厚度:7.4毫米;重量:162克(5.73盎司) [5]  。iPhone 12设计采用了离子玻璃,以及7000系列铝金属外壳。"}
    {"index":{}}
      {"title":"iphone13","price":6000,"created_at":"2021-09-15","description":"iPhone 13屏幕采用6.1英寸OLED屏幕;高度约146.7毫米,宽度约71.5毫米,厚度约7.65毫米,重量约173克。"}
    {"index":{}}
      {"title":"iphone13 pro","price":8999,"created_at":"2021-09-15","description":"iPhone 13Pro搭载A15 Bionic芯片,拥有四种配色,支持5G。有128G、256G、512G、1T可选,售价为999美元起。"}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    常见检索

    查询所有[match_all]

    match_all关键字: 返回索引中的全部文档

    GET /products/_search
    {
      "query": {
        "match_all": {}
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    关键词查询(term)

    term 关键字: 用来使用关键词查询

    GET /products/_search
    {
     "query": {
       "term": {
         "price": {
           "value": 4999
         }
       }
     }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    NOTE1: 通过使用term查询得知ES中默认使用分词器为标准分词器(StandardAnalyzer),标准分词器对于英文单词分词,对于中文单字分词

    NOTE2: 通过使用term查询得知,在ES的Mapping Type 中 keyword , date ,integer, long , double , boolean or ip 这些类型不分词,只有text类型分词

    范围查询[range]

    range 关键字: 用来指定查询指定范围内的文档

    GET /products/_search
    {
      "query": {
        "range": {
          "price": {
            "gte": 1400,
            "lte": 9999
          }
        }
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    前缀查询[prefix]

    prefix 关键字: 用来检索含有指定前缀的关键词的相关文档

    GET /products/_search
    {
      "query": {
        "prefix": {
          "title": {
            "value": "ipho"
          }
        }
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    通配符查询[wildcard]

    wildcard 关键字: 通配符查询 ? 用来匹配一个任意字符 * 用来匹配多个任意字符

    GET /products/_search
    {
      "query": {
        "wildcard": {
          "description": {
            "value": "iphon*"
          }
        }
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    多id查询[ids]

    ids 关键字 : 值为数组类型,用来根据一组id获取多个对应的文档

    GET /products/_search
    {
      "query": {
        "ids": {
          "values": ["verUq3wBOTjuBizqAegi","vurUq3wBOTjuBizqAegk"]
        }
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    模糊查询[fuzzy]

    fuzzy 关键字: 用来模糊查询含有指定关键字的文档

    GET /products/_search
    {
      "query": {
        "fuzzy": {
          "description": "iphooone"
        }
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    注意: fuzzy 模糊查询 最大模糊错误 必须在0-2之间

    • 搜索关键词长度为 2 不允许存在模糊
    • 搜索关键词长度为3-5 允许一次模糊
    • 搜索关键词长度大于5 允许最大2模糊

    布尔查询[bool]

    bool 关键字: 用来组合多个条件实现复杂查询

    must: 相当于&& 同时成立

    should: 相当于|| 成立一个就行

    must_not: 相当于! 不能满足任何一个

    GET /products/_search
    {
      "query": {
        "bool": {
          "must": [
            {"term": {
              "price": {
                "value": 4999
              }
            }}
          ]
        }
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    多字段查询[multi_match]

    GET /products/_search
    {
      "query": {
        "multi_match": {
          "query": "iphone13 毫",
          "fields": ["title","description"]
        }
      }
    }
    注意: 字段类型分词,将查询条件分词之后进行查询改字段  如果该字段不分词就会将查询条件作为整体进行查询
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    默认字段分词查询[query_string]

    GET /products/_search
    {
      "query": {
        "query_string": {
          "default_field": "description",
          "query": "屏幕真的非常不错"
        }
      }
    }
    注意: 查询字段分词就将查询条件分词查询  查询字段不分词将查询条件不分词查询
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    高亮查询[highlight]

    highlight 关键字: 可以让符合条件的文档中的关键词高亮

    GET /products/_search
    {
      "query": {
        "term": {
          "description": {
            "value": "iphone"
          }
        }
      },
      "highlight": {
        "fields": {
          "*":{}
        }
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    自定义高亮html标签: 可以在highlight中使用pre_tagspost_tags

    GET /products/_search
    {
      "query": {
        "term": {
          "description": {
            "value": "iphone"
          }
        }
      },
      "highlight": {
        "post_tags": [""], 
        "pre_tags": [""],
        "fields": {
          "*":{}
        }
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    多字段高亮 使用require_field_match开启多个字段高亮

    GET /products/_search
    {
      "query": {
        "term": {
          "description": {
            "value": "iphone"
          }
        }
      },
      "highlight": {
        "require_field_match": "false",
        "post_tags": [""], 
        "pre_tags": [""],
        "fields": {
          "*":{}
        }
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    返回指定条数[size]

    size 关键字: 指定查询结果中返回指定条数。 默认返回值10条

    GET /products/_search
    {
      "query": {
        "match_all": {}
      },
      "size": 5
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    分页查询[form]

    from 关键字: 用来指定起始返回位置,和size关键字连用可实现分页效果

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

    指定字段排序[sort]

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

    返回指定字段[_source]

    _source 关键字: 是一个数组,在数组中用来指定展示那些字段

    GET /products/_search
    {
      "query": {
        "match_all": {}
      },
      "_source": ["title","description"]
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

  • 相关阅读:
    LeetCode刷题day48|198.打家劫舍、213.打家劫舍Ⅱ、337.打家劫舍Ⅲ
    Redis Cluster
    Spring.NET使用Oracle.DataAccess.Client访问数据库
    Python 操作pdf文件(pdfplumber读取PDF写入Excel)
    【计算机三级信息安全】信息安全保障概述
    100天精通Python(可视化篇)——第101天:Pyecharts绘制多种炫酷仪表盘图参数说明+代码实战
    Hadoop -- 分布式文件系统
    位段的声明 以及 分配内存的方式
    ZooKeeper 概述
    弃用 ifconfig 吧,你值得收藏的 IpRoute2 简明指南
  • 原文地址:https://blog.csdn.net/c15158032319/article/details/126091232