集群

健康值的三种状态

  • Green:所有索引的所有分片均可用 primaryreplice 均可用。

  • Yellow 至少有一个 replice不可以用, 但是所有的 primary 正常。

  • Red 至少有一个 primary 不可用。

健康值查询

GET _cat/health?v   # 列表的形式查看
GET _cluster/health # json的格式查看 (推荐使用) kibana 集群 -> 堆栈监控里可视化查看

健康值查询详情

{
"cluster_name" : "docker-cluster", # 集群名称
"status" : "green",
"timed_out" : false,
"number_of_nodes" : 1, # 总节点数
"number_of_data_nodes" : 1, # 存储数据节点
"active_primary_shards" : 13, # 总切片数
"active_shards" : 13,
"relocating_shards" : 0,
"initializing_shards" : 0,
"unassigned_shards" : 0,
"delayed_unassigned_shards" : 0,
"number_of_pending_tasks" : 0,
"number_of_in_flight_fetch" : 0,
"task_max_waiting_in_queue_millis" : 0,
"active_shards_percent_as_number" : 100.0
}

全文检索

全文检索,是索引系统通过扫描文章中的每个词,对每个词都建立索引,并指出在文章中出现的次数和位置,当用户查找时,索引系统会根据事先建立的索引进行查找,并将查到的结果反馈给用户的检索方式。

id title desc
1 are you kidding ? 你是凯迪吗?
2 No im sure china 不,我是秀儿
3 made in china 麦迪在中国

are you kidding ? No im sure made in china
term index (词项索引) term dictionary (词项字典) Posting List (倒排表)
im 2
are 1
china 2,3
No 2

分词

大颗粒度的分词

GET _analyze
{
"analyzer": "ik_smart",
"text": ["我喜欢刘德华的歌"]
}

更小颗粒度的分词

GET _analyze
{
"analyzer": "ik_max_word",
"text": ["我喜欢刘德华的歌"]
}

压缩算法

  • FOR、RoaringBitmap :倒排表

  • FST 词项索引,接近于 hash 算法

其他重要概念

节点

  • 一个节点就是一个 es 实例
  • 一个节点并不是一个物理机,但是建议一台机器上安装只启动一个节点
  • 节点的角色分为 选举节点、数据节点、冷节点、热节点等。

分片

  • es7 以后默认只有一个主分片,主分片的数量一旦确认就不能更改。但是副本可以任意修改数量
  • es 可以自动的进行分片的再平衡
  • 一个 doc 不可能存在于多个主分片中,但是可以存在于多个副本中
  • 每个主分片和其副分片不能存在与同在一个节点上。

索引

查看索引的健康值

GET _cat/indices?v

查看某一个的索引信息

GET kibana_sample_data_logs/_search

删除索引

DELETE /shopping?pretty

映射

映射方式分为两种:

  • 动态映射(自动映射)
  • 静态映射(手动映射)

es 的支持的具体的数据类型,建议去 es 官网查看

  • 数字类型。 longintegershortdoublefloat

  • keyworlds: 适合于索引结构化数据,可以应用于过滤、排序、聚合。 keyword 类型的字段只能通过精确值搜索到。索引的 id 应该使用 keyworld 类型。

  • dates 时间类型。

  • text: 字段是可以全文检索的、不用于排序,很少用于聚合。text 默认只创建倒排索引,不会创建倒正排索引。

  • object: 创建单个的 JSON 对象

  • nested: 用于JSON 对象的字符数组。

 为什么不能给 text 类型创建正排索引?是因为加载高基数的 text 的时候,字段索引一旦加载到堆中,就会一直在那里。

默认映射类型

  • 整数:long
  • 浮点:float
  • true|false boolean
  • 日期:date
  • 数组:取决于数组中的第一个字段
  • 对象:object
  • 字符串:不是数字和日期类型,就会被映射成 textkeyword 两个类型。

J除上述类型外,其余类型必须显示指名

查看映射

get /product/_mapping

创建 mobile_phone 索引

PUT /mobile_phone
{
"mappings": {
"properties": {
"classify": {
"properties": {
"color": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"memory": {
"type": "text"
}
}
},
"des": {
"type": "text",
"analyzer": "ik_max_word"
},
"isdel":{
"type": "boolean"
},
"name": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"price": {
"type": "long"
},
"publish_time": {
"type": "date"
},
"tags": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}}}}}}

创建 person 索引

索引中,height 是不能被检索的

PUT /person
{
"mappings": {
"properties": {
"name": {
"type": "text",
"index": true
},
"sex": {
"type": "keyword",
"index": true
},
"height": {
"type": "long",
"index": false
}
}}}

查询

添加数据

GET shopping/_search
DELETE shopping?pretty
PUT shopping
{
"mappings": {
"properties": {
"name":{
"type": "text",
"analyzer": "ik_max_word",
"fields": {
"keyword":{
"type": "keyword",
"ignore_above": 256
}
}
},
"category":{
"type": "keyword"
},
"price":{
"type": "double"
}
}
}
} POST shopping/_doc/1
{
"name":"小米 12s pro",
"category":"手机",
"price":"5399.00"
} POST shopping/_doc/2
{
"name":"小米 12x",
"category":"手机",
"price":"2869.00"
} POST shopping/_doc/3
{
"name":"红米 Note11",
"category":"手机",
"price":"1199.00"
} POST shopping/_doc/4
{
"name":"红米 K40s",
"category":"手机",
"price":"2149.00"
} POST shopping/_doc/5
{
"name":"红米 buds4",
"category":"耳机",
"price":"199.00"
} POST shopping/_doc/6
{
"name":"红米 buds3",
"category":"耳机",
"price":"169.00"
} POST shopping/_doc/7
{
"name":"华为 Mate 50 Pro",
"category":"手机",
"price":"7799.00"
} POST shopping/_doc/8
{
"name":"华为HUAWEI FreeBuds 4E",
"category":"耳机",
"price":"579.00"
} POST shopping/_doc/9
{
"name":"华为HUAWEI FreeLace Pro",
"category":"耳机",
"price":"399.00"
}

更改数据

将华为手机的价格改为 5499

POST /shopping/_update/Wu_7y4AB4H2nHiu3of8g
{
"doc":{
"price":5499
}
}

简单查询

  • match_all: 没有任何查询条件。

  • match:匹配查询,会将查询条件进行分词,多个分词查询以后是 or 的关系。

  • multi_match:与match类似,不同的是可以在多个字段中查询

  • term:精确匹配,不会对查询条件进行分词

  • terms:支持多个关键字精确查询

  • range:范围查询

  • match_phrase: 1.查询条件分词后都必须匹配,类似match中的operator=and;2.文档匹配的顺序必须与查询条件分词匹配后一致

详细参考:https://blog.csdn.net/LeoHan163/article/details/126433158

查询示例

# 查询所有数据,默认最多10个。
GET shopping/_search
{
"query": {
"match_all": {}
}
} # match 会将查询条件分词。然后进行查询;而且不的词之间是 or 的关系
GET shopping/_search
{
"query": {
"match": {
"name": "华为小米"
}}} # 查询条件分词,但是存储数据不分词。
GET shopping/_search
{
"query": {
"match": {
"name.keyword": "小米 12x"
}}} # 多字段查找;多个字段是 and的关系
GET shopping/_search
{
"query": {
"multi_match": {
"query": "华为手机",
"fields": ["name","category"]
}}} # term 精确匹配
GET shopping/_search
{
"query": {
"term": {
"name": {
"value": "小米"
}}}} # match_phrase
GET shopping/_search
{
"query": {
"match_phrase": {
"name": "小米"
}}} # terms 的多字段查询
GET shopping/_search
{
"query": {
"terms": {
"name": [
"小米",
"华为"
]}}} # 查询价格在 1000 到 2000 之间的。
GET shopping/_search
{
"query": {
"range": {
"price": {
"gte": 1000,
"lte": 2000
}}}}

对搜索结果,数量进行限制,只取两个

GET shopping/_search
{
"query": {
"match": {
"name": "手机"
}
},
"from": 1,
"size": 2
}

对查询结果限制、排序

# 只想取某一个字段
GET shopping/_search
{
"query": {
"match_all": {}
}
, "_source": ["name"]
} # 对查询结果数量限制
GET shopping/_search
{
"query": {
"match_all": {}
},
"from": 1,
"size": 2
} # 对价格进行排序
GET shopping/_search
{
"query": {
"match_all": {}
},
"sort": [
{
"price": {
"order": "desc"
}
}
]
}

范围查找;搜索价格从 100 到 1000 之间的电子产品

GET shopping/_search
{
"query": {
"bool": {
"filter": {
"range": {
"price": {
"gte": 100,
"lte": 1000
}
}}}}} # 对于时间格式的查询 GET website/_search
{
"query": {
"range": {
"post_date": {
"gte": "2/1/2018",
"lte": "2019",
"format": "dd/MM/yyyy||yyyy"
}}}}

bool 查询

  • must 必须满足的条件,会计算评分

  • must not 必须不满足,不会计算评分

  • should 满不满足无所谓,但会计算评分

  • filter 必须满足条件,但是不会计算评分

bool 查询示例

# 查看属于手机,但不是小米的数据
GET shopping/_search
{
"query": {
"bool": {
"filter": [
{"term": {
"category": "手机"
}}
],
"must_not": [
{
"match": {
"name": "小米"
}}]}}}

对查询结果高亮显示

GET shopping/_search
{
"query": {
"match": {
"name": "华为手机"
}
},
"highlight": {
"fields": {
"name":{}
}}
}

聚合

es 的聚合查询流程,一般分为两步

  • 分组
  • 组内聚合

聚合索引的示例

GET shopping/_search
{
"size": 0, //不需要返回数据
"aggs": {
"iphone-sum": { //给聚合索引起个名,手机总价
"sum": {
"field": "price" //计算总价
}
},
"iphone-min":{
"min": {
"field": "price"
}
},
"iphone-max":{
"max": {
"field": "price"
}}}} GET shopping/_search
{
"size": 0,
"aggs": {
"group-category": { // 先给桶聚合起个名
"terms": {
"field": "category", // 选择分桶的字段
"size": 10, // 最多显示多少条
"order": {
"_count": "desc" //根据每个桶内样例个数正排
}
},
"aggs": {
"avg-price": { // 每个桶内继续子聚合
"avg": {
"field": "price"
}
},
"hits": {
"top_hits": { // 每个桶内,显示一个样例数据
"size": 1,
"_source": [
"src_ip",
"user_id"
]
}}}}}}

参考文献

ES 基础操作的更多相关文章

  1. es基础操作

    在curl 的 url 中 , 问号后台可以加上pretty=true , 可以将返回来的json进行格式化 . 如果es集群中只有一个node , 那么他的集群健康状态是黄色的 , 只需要再加一个n ...

  2. 【Linux 操作系统】Ubuntu 基础操作 基础命令 热键 man手册使用 关机 重启等命令使用

    . : 关机, 如果将Linux默认运行等级设置为0, 系统将无法启动; -- : 多用户模式, 允许使用网络文件系统, 一般不使用图形界面登陆就是这种模式; -- : 多用户图形界面模式, 该模式下 ...

  3. Ubuntu 基础操作 基础命令 热键 man手册使用 关机 重启等命令使用

    . : 关机, 如果将Linux默认运行等级设置为0, 系统将无法启动; -- : 多用户模式, 允许使用网络文件系统, 一般不使用图形界面登陆就是这种模式; -- : 多用户图形界面模式, 该模式下 ...

  4. elasticsearch 7版本 基础操作

    elasticsearch 7版本 基础操作 首先我们浏览器http://localhost:5601/进入 kibana里的Console中输入 首先让我们在 Console 中输入: PUT t1 ...

  5. springboot整合es客户端操作elasticsearch(五)

    springboot整合es客户端操作elasticsearch的总结: 客户端可以进行可以对所有文档进行查询,就是不加任何条件: SearchRequest searchRequest = new ...

  6. elastic search&logstash&kibana 学习历程(二)es基础知识

    简介:es的index索引,document文档对象,副本,多节点集群等基础知识 1.通俗的解释: 在Elasticsearch中,文档归属于一种类型(type),而这些类型存在于索引(index)中 ...

  7. 前端(十二)—— JavaScript基础操作:if语句、for循环、while循环、for...in、for...of、异常处理、函数、事件、JS选择器、JS操作页面样式

    JavaScript基础操作 一.分支结构 1.if语句 if 基础语法 if (条件表达式) { 代码块; } // 当条件表达式结果为true,会执行代码块:反之不执行 // 条件表达式可以为普通 ...

  8. Elasticsearch第二篇:基本概念和基础操作

    上一篇文章,我们已经是在Windows10 上搭建了 Elasticsearch 环境已经安装了相关的插件,现在我们就可以像操作webapi一样简单的操作 ElasticSearch 了,有园友说可以 ...

  9. es篇-es基础

    点赞再看,养成习惯,微信搜索「小大白日志」关注这个搬砖人. 文章不定期同步公众号,还有各种一线大厂面试原题.我的学习系列笔记. es基础知识 es和solr一样,都是基于Lucene的全文检索数据库 ...

  10. Elasticsearch学习系列二(基础操作)

    本文将分为3块讲解Es的基础操作.分别为:索引(index).映射(mapping).文档(document). 索引操作 创建索引库 语法: PUT /索引名称{ "settings&qu ...

随机推荐

  1. 懂九转大肠的微软New Bing 内测申请教程

    最近微软的New Bing开放内测了,网上已经有拿到内测资格的大佬们对比了ChatGPT和New Bing.对比结果是New Bing比ChatGPT更强大.来看看具体对比例子吧 1.时效性更强 Ch ...

  2. JSTL标签库C标签的使用注意事项

    今天在写jsp中在c标签上踩了不少坑,在此记录一下. <c:if>标签单独使用,不与<c:otherwise>配套使用,搭配使用会报错. <c:otherwise> ...

  3. Zstack使用经验系列1-安装的网络配置

    https://www.zstack.io/help/product_manuals/maintenance_manual/4.html 在官网上从这里有详细的安装,读者可以从上面链接开始起步装起来. ...

  4. TNF诱导的关节破坏由IL-1介导

    TNF诱导的关节破坏由IL-1介导Zwerina J, et al. PNAS.2007;104:11742-7.TNF拮抗剂有效抑制人类类风湿关节炎(RA)的炎症和结构破坏.然而截至目前还不清楚TN ...

  5. 如何把已安装的nodejs高版本降级为低版本(图文教程)

    第一步.先清空本地安装的node.js版本 1.按健win+R弹出窗口,键盘输入cmd,然后敲回车(或者鼠标直接点击电脑桌面最左下角的win窗口图标弹出,输入cmd再点击回车键) 2.然后进入命令控制 ...

  6. QFileDialog实现同时选择文件和文件夹,确认取消按钮英文问题解决方法

    如下图所示,需求是同时能够选择文件或者文件夹,但是QFileDialog文件窗口类要么只能选文件,要么只能选文件夹,无法同时去选择文件和文件夹: 要实现这样的需求,封装了一个类,实现同时选择文件和文件 ...

  7. 基于PostGIS使用GeoServer发布数据量大的GPS轨迹路线图

    1. 引言 人类在行走或者驾驶过程中产生的GPS轨迹,是道路的一种采样,根据GPS轨迹路线,我们可以推知道路的存在,根据轨迹的密度,可以推知道路的热度以及重要性.如何才能在地图中显示大量的轨迹,这是一 ...

  8. PostgreSQL Repmgr集群

    一.概述 repmgr是一套开源工具,用于管理PostgreSQL服务器群集内的复制和故障转移.它支持并增强了PostgreSQL的内置流复制,该复制流提供了一个读/写主服务器以及一个或多个只读备用数 ...

  9. Java的注释和标识符

    java 的注释规则 1. 单行注释 语法:// 描述://用于当行注释,与JavaScript一样 //这是一个代码注释 2. javadoc注释 语法: /** *注释内容 / 描述:多行注释中可 ...

  10. 从源码MessageSource的三个实现出发实战spring·i18n国际化

    1.前言 互联网业务出海,将已有的业务Copy to Global,并且开始对各个国家精细化,本土化的运营.对于开发人员来说,国际化很重要,在实际项目中所要承担的职责是按照客户指定的语言让服务端返回相 ...