ES语法

本文深入解析Elasticsearch的基本概念,包括节点、集群、索引、分片、副本等核心要素,同时介绍数据管理、查询操作及中文分词器的使用。适合初学者快速上手并掌握Elasticsearch关键技能。

一基础概念

node节点,部署es程序的服务器
cluster集群多个节点
index索引,相当于数据库的名字
shard索引分片,默认5
replicas索引副本
type类型
document文档数据库的row

其实我们可以理解为

关系型ES
databaseindex
tabletype

document文档3元素(其实就是数据库里面的字段)

_index文档索引(相当于id)
_type数据类型(相当于varchar)
_ID文档唯一ID

ES请求方式

GET查询
POST增\改\查
PUT增\改
DELETE

ES数据类型

一级分类二级分类具体类型
核心类型字符串类型text keyword
核心类型整数型integer long short byte
核心类型
核心类型
核心类型
核心类型
核心类型
核心类型

分词器分类

标准分词器查询
IK中文分词器(自定义)
delete sc_001     删除索引

创建索引(只能用PUT,在6.X版本中一个index(库)只能创建1个type(表))-----其实就相当于是创建了数据库

put  索引名称  /可以省略代表根目录

put  sc_001
{
  "settings":{
	"number_of_shards":3    #分片数目默认5,
	"number_of_replicas":2   #副本数量,根据集群数量添加
  },
  "mappings":{               #对table的设置
    "user":{                 #创建user表
       "properties":{        #设置字段
          "id":{             #id字段
            "type":"long"    #属性
          },
          "name":{
            "type":"text"
          },
          "age":{
            "type":"long"
          }
       }
    }
  }
}

查询索引库

GET sc_003
#以下为结果
{
  "sc_001": {
    "aliases": {},
    "mappings": {
      "user": {
        "properties": {
          "age": {
            "type": "long"
          },
          "id": {
            "type": "long"
          },
          "name": {
            "type": "text"
          }
        }
      }
    },
    "settings": {
      "index": {
        "creation_date": "1574304267283",
        "number_of_shards": "4",
        "number_of_replicas": "1",
        "uuid": "wbiEpQzORT6yfXzJ3ah3gQ",
        "version": {
          "created": "6020499"
        },
        "provided_name": "sc_001"
      }
    }
  }
}

管理文档(数据)

PUT /索引名称/类型名称/文档ID(POST可以不指定)
{
	"字段名称":"字段值"
	...
}
#     我们新增2条数据分别使用POST和GET   如果没有user的话会自动的创建
POST sc_001/user
{
  "id":1,
  "name":"zhangsan",
  "age":40
}

PUT sc_001/user/1
{
  "id":1,
  "name":"LISI",
  "age":31
}

在这里插入图片描述
修改数据-----实质是删除原来的数据后新增

PUT sc_001/user/1
{
  "id":1,
  "name":"LI22",
  "age":32
}

GET sc_001/_search

查询

# 查看全部索引  
GET _cat/indices 
# 查看全部 
GET _search

查询结果分析

took请求耗费时间,毫秒为单位
_shards查询的分片总数
timed_out查询是否超时
hits查询结果集

score分值越大搜索排名越靠前

数据查询的请求体

过滤查询:不进行打分,用于精准查询,比如查性别为"男" 不是范围性
filter要和bool联合使用,term指明子句的类型
query常用子句
match 匹配度查询 全文检索
term 过滤查询\匹配查询 精准查询 与filter组合
range 过滤查询\匹配度查询 范围查询 参数get 大于等于 lte小于等于

组合查询
bool子句
must 必须符合
must_not 不符合什么条件
should 满足条件会增加分值
filter 使用过滤模式

分页参数
from :分页开始位置
size:页大小
在这里插入图片描述

POST sc_003/user/_search
{
  "query": {
    "bool": {
      "filter": {
        "range": {
          "age": {
            "gte": 30,
            "lte": 50
          }
        }
      }
    }
  }
}
#根据条件查询数据
POST sc_003/user/_search
{
  "from": 1,
  "size": 1, 
  "query": {
    "bool": {
      "filter": {
        "range": {
          "age": {
            "gte": 40,
            "lte": 45
          }
        }
      }
    }
  }
}

IK分词器

#粗分词
POST  _analyze
{
  "analyzer":"ik_smart",
  "text": " 中华人名共和国合同法"
}
#细分词
POST  _analyze
{
  "analyzer":"ik_max_word",
  "text": " 中华人名共和国合同法"
}
### Elasticsearch 查询语法规则 Elasticsearch 提供了一种强大的查询语言,允许执行从简单文本搜索到复杂数据分析的各种操作。为了实现高效的数据检索和处理,掌握其条件查询语法十分必要。 #### 基本查询结构 所有查询请求都通过 RESTful API 发送,并采用 JSON 格式的请求体来描述具体的查询逻辑。最基础的查询形式如下所示: ```json { "query": { "match_all": {} } } ``` 此命令会返回索引中的全部文档[^1]。 #### 条件匹配查询 当需要基于特定字段的内容进行筛选时,可以使用 `match` 或者更精确的 `term` 子句: ```json { "query": { "match": { "title": "elasticsearch" } } } ``` 上述例子展示了如何查找标题中含有 “elasticsearch” 关键词的所有记录。 对于布尔类型的字段或者其他不需要分词器参与比较的情况,则应该选用 `term`: ```json { "query": { "term": { "status": "published" } } } ``` 这段代码用于定位状态标记为已发布的条目。 #### 复合查询构建 实际应用场景往往涉及多个条件组合而成的复合查询表达式。此时可借助于 `bool` 结构来进行多条件联合: ```json { "query": { "bool": { "must": [ { "term": { "category": "technology" }}, { "range": { "publish_date": {"gte": "2023-01-01"}}} ], "should": [{ "term": { "tags": "bigdata"} }], "minimum_should_match": 1, "filter": [{ "term": { "is_active": true }}] } } } ``` 这里定义了一个复杂的查询场景:寻找属于技术类别的文章,在2023年之后发布;并且至少有一个标签是大数据的文章,同时这些文章必须处于激活状态。 #### 范围查询 针对数值型或日期时间戳字段,还可以利用范围查询指定上下限值之间的目标对象集合: ```json { "query": { "range": { "age": { "gte": 18, "lte": 65 } } } } ``` 该片段表示只选取年龄介于18至65岁之间的人群数据。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值