Post

OpenSearch 初见

OpenSearch 初见

好的,因为选型问题,还要在来一遍ES。但是开源的已经是OpenSearch了,所以…

官方文档在这里,可以查找到本笔记的来源。并且其中有详尽的安装文档。

简介

  • OpenSearch 将数据组织成_索引_。每个索引都是 JSON_文档_的集合。单下划线前缀的,是opensearch自己添加的一些元素。

  • OpenSearch 将索引拆分为分_片_,以便在集群中的节点之间均匀分布。

  • 一个好的经验法则是将分片大小保持在 10-50 GB 之间。

  • 您使用 REST API 与 OpenSearch 集群进行交互。

查询关键词

  • match

    全文索引。会分词,模糊查询。默认分词逻辑中,单词为一组,数字算作单词一部分。中文单字为一组

  • term

    精确查询。不会拆词

  • terms

    多值匹配。同term查询,但是可以进行列表级别的匹配 约等于 mysql 的 in

  • range

    范围查询。

  • prefix

    前缀查询。

  • wildcard

  • fuzzy

  • must、must not、should

  • match all

  • match_phrase

  • multi_match

  • 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 (节点池):

  • Dashboards (仪表板):

  • ConfMgmt (配置管理):

  • General (通用配置):

This post is licensed under CC BY 4.0 by the author.