OpenSearch 初见
好的,因为选型问题,还要在来一遍ES。但是开源的已经是OpenSearch了,所以…
官方文档
在这里,可以查找到本笔记的来源。并且其中有详尽的安装文档。
简介
OpenSearch 将数据组织成_索引_。每个索引都是 JSON_文档_的集合。单下划线前缀的,是opensearch自己添加的一些元素。
OpenSearch 将索引拆分为分_片_,以便在集群中的节点之间均匀分布。
一个好的经验法则是将分片大小保持在 10-50 GB 之间。
您使用 REST API 与 OpenSearch 集群进行交互。
查询关键词
match
全文索引。会分词,模糊查询。默认分词逻辑中,单词为一组,数字算作单词一部分。中文单字为一组
term
精确查询。不会拆词
terms
多值匹配。同term查询,但是可以进行列表级别的匹配 约等于 mysql 的 in
range
范围查询。
prefix
前缀查询。
wildcard
通配符模糊查询,类似 mysql 的 like,?匹配一个字符,*匹配 0~n 个字符
fuzzy
不同于 mysql 的 like,它可以错误一些字,比如搜索 mock,可以搜索出 mick
must、must not、should
关键词必须包含查询,全值匹配
- should类似于mysql的或
match all
查询全部
match_phrase
分词后,待查询的字段同时匹配分词后的所有关键词
顺序也必须保持一致
multi_match
多字段匹配,有一个字段匹配,就满足
filter 和 must
filter 与 must 是属于同一个级别的查询方式,都可以作为 query->bool 的属性
filter:不计算评分, 查询效率高;有缓存(推荐)
must:要计算评分,查询效率低;无缓存
聚合查询
用于统计计算值
解析器
- 只有text类型字段才能在mapping中设置analyzer
use note
查询使用特殊计算结果进行排序
1
2
3
4
5
6
7
8
9
"sort": {
"_script": {
"type": "number",
"script": {
"inline": "doc['views'].value + doc['usage'].value * 2"
},
"order": "desc"
}
}
用特殊脚本更新文档中的值
1
2
3
4
5
6
{
"script": {
"source": "ctx._source.views+=0;ctx._source.usage+=0;",
"lang": "painless"
}
}
创建索引时,自定义analyzer,进一步的,可以自定义同义词库,也可以自行组装解析器
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
"settings": {
"analysis": {
"analyzer": {
"whitespace_synonymous": {
"tokenizer": "ik_smart",
"filter": [
"synonymous_filter"
]
}
},
"filter": {
"synonymous_filter": {
"type": "synonym",
"expand": true,
"updateable": true, // 支持动态更新
"synonyms_path": "synonyms_file.txt"
}
}
}
}
重建索引,将索引source的文档转移到dest中,转换时,运行script的脚本
1
2
3
4
5
6
7
8
9
10
11
12
{
"source": {
"index": "datasets2"
},
"dest": {
"index": "datasets4"
},
"script": {
"lang":"painless",
"source":"ctx._source.views=0;ctx._source.usage=0;"
}
}
opensearch内置类型
别名(Alias):为现有字段提供一个额外的名称。
二进制(Binary):以Base64编码的二进制值。
数值型(Numeric):包括多种数值类型,如byte、double、float、half_float、integer、long、unsigned_long、scaled_float、short。
布尔(Boolean):表示布尔值。
日期(Date):以毫秒存储的日期。
IP地址(IP):IPv4或IPv6格式的IP地址。
范围(Range):表示值的范围,如integer_range、long_range、double_range、float_range、date_range、ip_range。
对象(Object):一个JSON对象。
嵌套(Nested):当数组中的对象需要独立索引时使用。
字符串(String):包括关键字(keyword)和文本(text),前者不进行分析,后者进行分析。
自动完成(Autocomplete):通过完成建议器提供自动完成功能。
地理位置(Geographic):包括地理点(geo_point)和地理形状(geo_shape)。
排名(Rank):用于文档相关性评分的提升或降低。
k-NN向量(k-NN Vector):允许将k-NN向量索引到OpenSearch中,并进行各种类型的k-NN搜索。
使用opensearch-operator部署
步骤
TODO
节点内容
Coordinators (协调节点):
协调节点主要负责处理传入的请求,查询分发和聚合结果。
它们通常不存储数据,也不执行数据处理任务,而是作为客户端请求的负载均衡器和路由器。
Nodes (节点):
这是一个通用术语,用于描述集群中的任何单个服务器或实例。
节点可以承担不同的角色,如主节点、数据节点、协调节点等。
Masters (主节点):
主节点负责集群的管理和控制。这包括管理集群状态、执行所有更新操作(如添加/删除索引)和任务调度。
为了避免单点故障,通常会有多个主节点,但在任何时候只有一个主节点是活跃的(即主要的主节点)。
NodePools (节点池):
节点池是一组具有相同配置和角色的节点。这可以帮助组织和管理具有类似特性和用途的节点。
在 Kubernetes 中,这可能对应于一组具有相同配置的 Pod。
Dashboards (仪表板):
Dashboards 是 OpenSearch Dashboards 的引用,这是一个与 OpenSearch 配套的数据可视化和管理界面。
它允许用户创建和查看图表、地图和仪表板,用于分析和可视化存储在 OpenSearch 中的数据。
ConfMgmt (配置管理):
这部分涉及集群配置的管理,包括如何更新和应用新的配置设置。
在 Kubernetes 环境中,这可能涉及配置映射(ConfigMaps)和自动化配置更新。
General (通用配置):
这通常指的是适用于整个 OpenSearch 集群的通用配置。
这可能包括网络设置、资源分配、日志记录配置等。