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存储

相关推荐
半桶水专家10 小时前
go语言中的结构体嵌入详解
开发语言·后端·golang
短剑重铸之日10 小时前
7天读懂MySQL|Day 5:执行引擎与SQL优化
java·数据库·sql·mysql·架构
酒九鸠玖11 小时前
Java--多线程
java
Dreamboat-L11 小时前
云服务器上部署nginx
java·服务器·nginx
长安er11 小时前
LeetCode215/347/295 堆相关理论与题目
java·数据结构·算法·leetcode·
cici1587412 小时前
C#实现三菱PLC通信
java·网络·c#
佳佳_12 小时前
关于在 Fabric.js 中注册字体覆盖的问题
后端·node.js
GoGeekBaird13 小时前
通过ChatGPT+Nano Banana定制一个 PPT 生成的工作流
后端
用户214118326360213 小时前
手把手教你部署AI视频复刻神器!一键生成Sora2级别视频
后端
k***921613 小时前
【C++】继承和多态扩展学习
java·c++·学习