Elasticearch 查询详解 (二)

简介: elk官网:[https://www.elastic.co/guide/en/enterprise-search-clients/index.html](https://www.elastic.co/guide/en/enterprise-search-clients/index.html)作者主页:https://www.couragesteak.com/

1 Rest风格说明

一种软件架构风格,而不是标准,知识提供了一组设计原则和约束条件。它主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更改有层次,易于实现缓存的机制。

method url地址 描述
PUT localhost:9200/索引名称/类型名称/文档id 创建文档(指定文档id)
POST localhost:9200/索引名称/类型名称 修改文档(随机文档id)
POST localhost:9200/索引名称/类型名称/文档id/_update 修改文档
DELETE localhost:9200/索引名称/类型名称/文档id 删除文档
GET localhost:9200/索引名称/类型名称/文档id 查询文档通过文档id
POST localhost:9200/索引名称/类型名称/_search 查询所有数据

1.1 创建一个索引

localhost:9200/索引名称/类型名称/文档id

PUT /test1/type1/1
{
  "name": "有勇气的牛排",
  "age": 18
}

在这里插入图片描述

1.1.1 字段类型:

字符串类型:text、keyword
数值类型:long、integer、short、byte、double、float、half_float、scaled_float
日期类型:date
布尔类型:boolean
二进制类型:binary

# 创建规则 索引+字段
PUT /test2
{
  "mappings": {
    "properties": {
      "name":{
        "type": "text"
      },
      "age":{
        "type": "long"
      },
      "birthday":{
        "type": "date"
      }
    }
  }
}

1.1.2 获取索引信息

# 获取当前索引信息
GET test2

在这里插入图片描述

1.1.3 查看索引默认信息

PUT /test3/_doc/1
{
  "name":"有勇气的牛排",
  "age": 18,
  "birthday": "2010-05-20"
}

在这里插入图片描述

GET test3

在这里插入图片描述

1.2 其他 _cat

# _cat 查看默认配置
# 获取数据库健康值
GET _cat/health

1.2 修改

1.2.1 PUT覆盖

重复执行

PUT /test3/_doc/1
{
  "name":"有勇气的牛排",
  "age": 18,
  "birthday": "2010-05-20"
}

1.2.2 POST更新

# 创建/更新
PUT /test3/_doc/1
{
  "name":"有勇气的牛排",
  "age": 18,
  "birthday": "2010-05-20"
}

# 更新
POST /test3/_doc/1/_update
{
  "doc":{
    "name": "大哥"
  }
}

1.3 删除索引

更具路径判断删除索引还是文档

# 删除指定索引
DELETE test1

1.3 删除指定文档

DELETE users/_doc/170

2 文档基本操作

2.1 基本操作

2.1.1 添加数据


PUT /vitcloud/user/2
{
  "name":"大漂亮",
  "age": 17,
  "desc": "女主",
  "tags":["旅游","轻音乐","弹琴"]
}

2.1.2 查数据

GET /vitcloud/user/2

# 精确搜索
GET /vitcloud/user/_search?q=name:黑客

2.1.3 更新数据 PUT

如果不传值,会被覆盖

PUT /vitcloud/user/2
{
  "name":"大漂亮2号",
  "age": 17,
  "desc": "女主",
  "tags":["旅游","轻音乐","弹琴"]
}

2.1.4 更新数据 POST (推荐)

POST /vitcloud/user/1/_update
{
  "doc":{
    "name":"大漂亮2号"
  }
}

2.2 复杂查询

2.2.1 模糊查询

GET /vitcloud/user/_search
{
  "query":{
    "match": {
      "name": "有勇气"
    }
  }
}

2.2.2 _source: 结果过滤


GET /vitcloud/user/_search
{
  "query":{
    "match": {
      "name": "有勇气"
    }
  },
  "_source":["name","desc"]
}

2.2.3 分组查询

GET /blog_rate/_search
{
  "size": 0,
  "aggs": {
    "group_by_tags": {
      "terms": {
        "field": "uid"
      }
    }
  }
}

2.2.4 sort: 排序

GET /vitcloud/user/_search
{
  "query":{
    "match": {
      "name": "有勇气"
    }
  },
  "sort": [
    {
      "age":{
        "order": "desc"
      }
    }
  ]
}

2.2.5 分页

/search/{current}/{pagesize}
from: 从第几条开始
size: 显示多少条

GET /vitcloud/user/_search
{
  "query":{
    "match": {
      "name": "有勇气"
    }
  },
  "_source":["name","desc"],
  "from": 0,
  "size": 2
}

2.2.6 bool 多条件精确查询

must:都满足
must_not:不满足的
should:满足一个即可

GET /vitcloud/user/_search
{
  "query":{
    "bool": {
      "must": [
        {
          "match": {
            "name": "有勇气"
          }
        },{
          "match": {
            "tags": "旅游"
          }
        }
      ]
    }
  }
}

2.2.7 范围过滤

  • gt: 大于
  • lt: 小于
  • gte: 大于等于
  • lte: 小于等于
GET /vitcloud/user/_search
{
  "query":{
    "bool": {
      "must": [
        {
          "match": {
            "name": "有勇气"
          }
        },
        "filter":{
          "range":{
            "age":{
              "gt":10,
              "lt":30
            }
          }
        }
      ]
    }
  }
}

2.2.8 匹配多个 条件多条件 空格隔开

GET /vitcloud/user/_search
{
  "query":{
    "match": {
      "tags": "游 音乐"
    }
  }
}

2.2.9 精确查询

term查询是直接通过倒排索引指定的词条进程精确的查找

关于分词

  • term :直接查询精确的
  • mathc:会使用分词器解释(先分析文档,然后通过分析的文档进行查询)

keyword不会被分词

2.2.10 精确查询 多个值

# 添加数据
PUT /vitcloud/_doc/1
{
  "t1": "22",
  "t2": "2022-02-22"
}

PUT /vitcloud/_doc/2
{
  "t1": "33",
  "t2": "2022-02-23"
}
GET vitcloud/_search
{
  "query": {
    "bool": {
      "should": [
        {
          "term": {
            "t1": "22"
          }
        },
        {
          "term": {
             "t1": "33"
          }
        }
      ]
    }
  }
}

2.2.11 高亮查询

默认为em标签

GET vitcloud/user/_search
{
  "query": {
    "match":{
      "name": "有勇气"
    }
  },
  "highlight": {
    "fields": {
      "name":{}
    }
  }
}

自定义标签

GET vitcloud/user/_search
{
  "query": {
    "match":{
      "name": "有勇气"
    }
  },
  "highlight": {
    "pre_tags": "<p class='key' style='color:red'>",
    "post_tags": "</p>", 
    "fields": {
      "name":{}
    }
  }
}

来源
狂神说:https://www.bilibili.com/video/BV17a4y1x7zq

相关文章
|
8天前
|
NoSQL MongoDB 数据库
查询数据
查询数据
11 4
|
2月前
|
SQL 存储
6. 复杂查询
6. 复杂查询
|
2月前
|
算法 Oracle 关系型数据库
数据库等值查询与统计信息
简介: 统计信息是为优化器的 cost 估算提供数据支撑,其中很重要的一点需求便是等值查询(EQUALS, IN 等) 场景下的基数估算。
数据库等值查询与统计信息
|
C++
202009-1称检测点查询
202009-1称检测点查询
66 0
202009-1称检测点查询
小技巧 - 如何查询医保卡号?
小技巧 - 如何查询医保卡号?
1345 0
小技巧 - 如何查询医保卡号?
|
SQL 关系型数据库 MySQL
五、简单查询
五、简单查询
128 0
|
关系型数据库 MySQL 数据库
Mysql查询-表数据的查询
创建一个数据库 create database python_test charset=utf8; 使用一个数据库 use python_test; 显示使用的当前数据是那个? select database(); 创建一个数据表 create table students( id int unsigned not null auto_increment primary key, name varchar(30), age tinyint unsigned default 0, high decimal(5
172 0
|
SQL
【查询】查询好像也可以很简单!
     还是要先说一下范围:以数据库为主的程序,b/s结构。        查询嘛,对于我来说就是SQL语句 where 后面(group、order by 前面的)的内容,把这搞定了,查询也就搞定了。
812 0
|
JavaScript 索引
查询
find简介 MonngoDB中使用find来进行查询。查询就是返回集合文档中的子集,子集的范围从0个到文档到整个集合。find的第一个参数决定了要返回哪些文档,这个参数是一个文档,用于指定的查询条件。
859 0

热门文章

最新文章