ElasticSearch语法使用

前言

kibana作为ElasticSearch的视图,可以在界面上操作ElasticSearch的索引或者索引数据,本文是基于kibana8界面的,因为不同的版本界面有点差异

查看索引数据

进入kibana,然后点击左边菜单栏

然后点击

查看索引数据,具体界面为

创建索引

点击create index按钮,可以创建索引

输入索引名称,点击save就可以创建索引

查看索引数据

点击索引进入到界面

点击try in Console点击语法查询界面,其语法如下

_bulk

_bulk 操作 可以在单个请求中一次执行多个新增、修改、删除操作,使用这种方式可以极大的提升索引性能。

json 复制代码
POST _bulk?pretty
{ "index" : { "_index" : "aaa" } }
{"name": "foo", "title": "bar"}

往索引aaa添加数据

_search查询数据
查询该索引下所有数据
bash 复制代码
GET /aaa/_search

这个查询aaa索引所有数据

根据条件查询
match
json 复制代码
{
  "query": {
    "match": {
      "name": "张三"
    }
  }
}

该语法是查询索引数据中带有"张三"的数据,但是es采用的是倒排索引,也就是拆词,索引name中带有"张三"的数据,会被查出来 备注 如果要精准查询,可以在字段加个keyword

bash 复制代码
GET /aaa/_search
{
  "query": {
    "match": {
      "name.keyword": "张三"
    }
  }
}

查询结果为

must

must子句:文档必须匹配must查询条件

bash 复制代码
GET /aaa/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "name": "张三"
          }
        }
      ]
    }
  }
}
must_not

文档不能匹配must_not查询条件; 语法为

bash 复制代码
GET /aaa/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "name": "张三"
          }
        }
      ],
      "must_not": [
        {
          "match": {
            "title": "bar"
          }
        }
      ]
    }
  }
}
should

should子句:文档应该匹配should子句查询的一个或多个; 语法为

bash 复制代码
GET /aaa/_search
{
  "query": {
    "bool": {
      "should": [
        {
          "match": {
            "name": "张三"
          }
        },
         {
          "match": {
            "name": "asds"
          }
        }
      ]
    }
  }
}

可以理解为查询name包含张三或者asds,查询结果为

filter

根据类型过滤,如根据年龄过滤

bash 复制代码
GET /aaa/_search
{
  "query": {
    "bool": {
      "filter": [
        {
          "range": {
            "age": {
              "gte": 10,
              "lte": 20
            }
          }
        }
      ]
    }
  }
}
根据id查询

(1)根据id查询单个

bash 复制代码
GET /aaa/_doc/1

(2)根据多个id取回多个文档

bash 复制代码
GET /_mget
{
   "docs" : [
      {
         "_index" : "aaa",
         "_id" :    20
      },
      {
         "_index" : "aaa",
         "_id" :    1
      }
   ]
}
保存数据

(1)指定主键

bash 复制代码
PUT /aaa/_doc/20
{
  "id": 20,
  "name": "John",
  "age": 20
}

指定文档的id为20

(2)随机生成主键id

bash 复制代码
POST /aaa/_doc
{
  "id": 20,
  "name": "Joh1n",
  "age": 20
}
更新数据
bash 复制代码
PUT /aaa/_doc/20
{
  "id": 20,
  "name": "John20",
  "age": 20
}

如果id=20存在就更新

总结

es是一个非常优秀的框架,在开发过程中,如果存在数据量过大的话,可以考虑一下用es存储

相关推荐
whinc2 小时前
Rust技术周刊 2026年第17周
后端·rust
whinc2 小时前
Rust技术周刊 2026年第18周
后端·rust
xqqxqxxq2 小时前
Java AI智能P图工具技术笔记
java·人工智能·笔记
whinc2 小时前
Rust技术周刊 2026年第16周
后端·rust
谷雨不太卷2 小时前
进程的状态码
java·前端·算法
jieyucx2 小时前
Go语言深度解剖:Map扩容机制全解析(增量扩容+等量扩容+渐进式迁移)
开发语言·后端·golang·map·扩容策略
顾温2 小时前
default——C#/C++
java·c++·c#
空中海2 小时前
02 ArkTS 语言与工程规范
java·前端·spring
楚国的小隐士2 小时前
在AI时代,如何从0接手一个项目?
java·ai·大模型·编程·ai编程·自闭症·自闭症谱系障碍·神经多样性
yaki_ya3 小时前
yaki-C语言:从概念基础到内存解析---数组(array)完全指南
java·c语言·算法