首页 文章 精选 留言 我的

精选列表

搜索[Elasticsearch],共4112篇文章
优秀的个人博客,低调大师

OpenSearch 2.0 发布,ElasticSearch 替代品性能大幅提升

OpenSearch 2.0 现已正式发布!此版本融合了来自整个 OpenSearch 社区的用户反馈和贡献,以提供大量新功能和性能增强。我们非常感谢社区为构建分布式搜索和分析工具集而做出的协作努力,这些工具集具有开发人员可以依赖的功能,可用性和开源灵活性,以创建他们最具创新性的解决方案。 下面介绍了一些可以使用 OpenSearch 2.0 的新功能和增强功能。您可以在此处找到完整的发行说明。 Lucene 9.1 在2.0版本中,OpenSearch已升级到Lucene 9.1(Lucene 9.1文档)。迁移到最新版本的Lucene为这个版本提供了许多令人兴奋的进步,并将在未来的版本中继续提供更多的价值。对于 2.0,此升级启用了以下增强功能: Lucene 9.1 提供的性能优化包括将多维点的索引速度提高了 10–15%。 Java Jigsaw模块支持意味着在 9.1 版本中,Lucene 具有模块描述符和依赖项信息。这与OpenSearch的持续发展相一致,使工具集更加模块化和可扩展。 文档级警报 文档级警报(请参阅 GitHub 问题)允许用户创建可按文档生成警报的监视器。这些监视器通常用于安全检测,其使用的方法与 OpenSearch 中提供的其他类型的警报监视器类似:查询级别和存储桶级别。虽然这些警报使用数据的汇总视图,但文档级警报可以对索引中的每个文档发出警报,突出显示哪些特定文档或记录正在触发监视器中的警报,并避免基于时间戳的监视间隙或数据重叠。 通知 新的通知插件(参见GitHub问题)为OpenSearch添加了一个统一的通知系统。用户不再需要独立配置和管理每个插件的通知通道;在2.0版本中,通知插件提供了一个集中的位置来设置和管理相关OpenSearch插件的通知。例如,除了管理警报插件的通知外,此插件还可以在索引状态管理(ISM) 插件中完成计划操作时生成通知。 ML 共享资源升级 随版本 1.3 引入的ML Commons 插件(请参阅 GitHub 存储库在 2.0 版中获得了两个新算法,可将 OpenSearch 的机器学习 (ML) 功能扩展到其他工作负载,减少构建 ML 功能所需的工作量,并集中计算、资源管理和 ML 流程的安全性。用于线性回归和定位的新算法与 kmeans 和随机切割森林的现有算法相结合,为构建和训练 ML 模型提供了全面的基础。线性回归的添加旨在简化用于预测分析的ML模型的开发;通过本地化,用户可以在开发 ML 方法方面抢占先机,这些方法可以揭示异常或检测到的任何事件的关键因素,从而促进根本原因分析和其他用例的分析和可视化。 替换非包容性术语 此版本将整个 OpenSearch 中的非包容性术语(如主、黑名单)替换为包容性术语(如集群管理器、白名单)。(请参阅 GitHub 中的问题)。 RPM 包管理器 版本 2.0 遵循版本 1.3.2,以包括RPM 包管理器分发版的可用性(请参阅 GitHub 问题)。这简化了基于红帽 Linux 的操作系统的 OpenSearch 发行版的安装。您可以在此处查看兼容的 Linux 版本。 重大更改和持续支持 OpenSearch遵循语义版本控制或SemVer,因此重大更改仅包含在主要版本版本中,例如此版本。对于2.0版本,不兼容更改的列表包括上面提到的Lucene升级和包容性术语等更新,以及由于添加通知插件而在目标API中的重大更改以及其他更改。有关 2.0 版中重大更改的完整列表,请参阅文档。 请注意,我们将继续支持 OpenSearch 1.x 发行版。有关弃用支持的详细信息,请参阅常见问题解答的第 3.28 节。 为项目做贡献 您的想法和贡献对 OpenSearch 项目产生了真正的影响!从Lucene升级到新插件再到ML进步,此版本包括来自OpenSearch社区的许多有价值的贡献。我们向所有为OpenSearch 2.0做出贡献的人致以最深切的感谢。 如果您有兴趣了解更多信息,有具体问题,或者只是想提供反馈,请访问OpenSearch.org,在 GitHub 上为OpenSearch或OpenSearch Dashboards打开问题,或在论坛中发帖。还有定期的社区会议,包括每次会议的更新和问答时间。 对于几乎任何类型的贡献,打开问题是第一步。如果您渴望加入,请查看带有“需要帮助”标签的问题。 立即开始 你可以在这里下载OpenSearch 2.0!请务必在开始时查看发行说明和更新的文档。

优秀的个人博客,低调大师

ElasticSearch的REST APIs 之 索引的别名(alias)管理

基于 ES 7.7, 官方文档 注意: 7.15版本中调整了分类, 把7.7版本中的Add和Update合并为"Create or Update", 更符合es api的定义 主要内容: Add index alias: 创建或更新别名 Delete index alias: 删除索引别名 Get index alias: 获取索引别名 Index alias exists: 检查索引别名是否存在 Update index alias: 添加/删除索引别名 1. Add index alias: 创建或更新索引别名 索引别名, 是一个或多个索引的辅助名称。 大多数 ES api 都接受使用索引别名来代替索引名称。官方文档链接 请求方式 # 支持PUT, POST方式 PUT|POST /<index>/_alias/<alias> # 用 _aliases 也可以的, 但是我们通常用 _alias, 字母能少写一个是一个 PUT|POST /<index>/_aliases/<alias> 当然也可以使用 `_all`来给当前集群的所有索引添加别名 => 这个有点不正常了 `PUT|POST` /_all/_alias/<alias> 查询参数 master_timeout (可选,时间单位)连接到主节点的等待超时时间。如果在超时时间已过之前没有响应, 则返回错误。 默认是值 30s。 timeout (可选,时间单位) 等待超时时间。如果在超时时间已过之前没有响应, 则返回错误。 默认是值 30s。 Request body filter (Required, query object) . 筛选查询(Filter query) 用来限制索引别名, 使用该别名时只返回符合过滤条件的文档。(这个应该是有body的时候才是必填的, 没有body就不用填写了) 这个有点像mysql中的view, 同一个table可以建立很多个view, 可以组合不同table的数据, 也可以给不同权限的账号建立不同的view来限制其可以访问的数据 routing (Optional, string) 用于将操作路由到特定分片的自定义路由。 几个栗子 1. 添加基于时间(time-based)的别名 比如给索引logs_20302801创建一个别名2030: PUT /logs_20302801/_alias/2030 2. 添加基于用户(user-based)的别名 创建索引users, 它有一个字段user_id, 然后给个别名user_12, 限制user_id=12的文档: PUT /users { "mappings": { "properties": { "user_id":{"type": "integer"} } } } # 插入几个文档 POST /users/_doc/10 { "user_id": 10 } POST /users/_doc/11 { "user_id": 11 } POST /users/_doc/12 { "user_id": 12 } # 查询, 能看到所有的文档 GET /users/_search # 给个别名`user_12`, 限制user_id=12的文档: PUT /users/_alias/user_12 { "routing": "12", "filter":{ "term":{ "user_id": 12 } } } # 查询别名, 只能看到 user_id=12的文档 GET /user_12/_search 官方文档举的这个栗子, 朕觉得不是太合适。maybe用"订单列表" 索引, 然后根据订单状态去建别名更适合 3. 在创建索引时添加别名 建立索引 logs_20302801, 同时添加别名 2030 PUT /logs_20302801 { "mappings" : { "properties" : { "year" : {"type" : "integer"} } }, "aliases" : { "current_day" : {}, "2030" : { "filter" : { "term" : {"year" : 2030 } } } } } 2. Delete index alias: 删除索引别名 DELETE /<index>/_alias/<alias> # 用 _aliases 也可以的, 但是我们通常用 _alias, 字母能少写一个是一个 DELETE /<index>/_aliases/<alias> 路径参数 <index> 支持多个索引以英文逗号连接, 支持通配符。 要匹配所有索引, 可以使用 _all 或者 * # 删除多个索引的别名 DELETE /twitter,users,orders/_alias/<alias> # 删除所有索引的别名 ---这个比较危险, 请勿随意测试 DELETE /_all/_alias/<alias> DELETE /*/_alias/<alias> <alias> 支持多个索引以英文逗号连接, 支持通配符。 要匹配所有索引别名, 可以使用 _all 或者 * # 删除指定索引的多个别名 DELETE /<index>/_alias/alias1,alias2,alias3 # 按通配符删除指定索引的别名 DELETE /<index>/_alias/ab* # 删除指定索引的所有别名 DELETE /<index>/_alias/* 查询参数 master_timeout (可选,时间单位)连接到主节点的等待超时时间。如果在超时时间已过之前没有响应, 则返回错误。 默认是值 30s。 timeout (可选,时间单位) 等待超时时间。如果在超时时间已过之前没有响应, 则返回错误。 默认是值 30s。 3. Get index alias: 获取索引别名 获取一个或多个索引别名。 官方文档 GET /_alias GET /_alias/<alias> GET /<index>/_alias/<alias> 路径参数 <alias> 支持多个索引以英文逗号连接, 支持通配符。 要匹配所有索引别名, 可以使用 _all 或者 * <index> 支持多个索引以英文逗号连接, 支持通配符。 查询参数 allow_no_indices 默认true。如果设置为true, 则当全部使用通配符*、_all只检索不存在(missing)或者已关闭(closed)的索引时,不会抛出错误。 这个是和参数 expand_wildcards 一起使用时的描述。如果只用通配符去检索expand_wildcards=all的别名, 则无论如何不会抛出错误。但是这里的missing条件怎么理解呢 ?? # 只是通配符检索别名: 不存在user2开头的别名, 不会报错(返回状态200, 空json) GET /_alias/user2*?allow_no_indices=false # 检索不存在的user2, 以及user2开头的别名时, 一定会报错(404 + 错误信息json) GET /_alias/user2?allow_no_indices=true GET /_alias/user2,user2*?allow_no_indices=true # 会报错 - 这个才是符合描述的(条件 expand_wildcards=closed) GET /_alias/user2*?allow_no_indices=false&expand_wildcards=closed expand_wildcards 通配符查询时的范围限制. 支持多个条件的逗号连接. all: 默认, 匹配open和closed的索引, 包括隐藏的. open: 表示只查询开放中的索引 closed: 只匹配closed的 hidden: 隐藏的(hidden)索引, 必须和open/closed联合使用. none: 不接受通配符. 默认 all ignore_unavailable 默认false. 如果设置为true, missing或closed的索引不会包括在返回数据中. (官方文档的这种表达, 至今还未理解是什么意思...) local 是否仅从本地节点获取信息 默认false, 表示从master节点获取信息. 如果设置为true, 则表示只从本地节点获取. 栗子 获取当前集群下的所有别名。返回所有索引, 无别名的显示空json GET /_alias GET /_all/_alias GET /*/_alias 返回的json中包含当前集群的所有index, 但是每次返回的顺序可能不同. 获取所有索引中有指定别名的,多个别名以英文逗号连接。 只要有一个别名不存在时抛出错误, 返回404状态, 以及能匹配到的部分索引 比如: 存在别名 user_12 和 2030, 不存在别名user_13 GET /_alias/user_13 GET /_alias/user_12,user_13,2030 通配符匹配指定的索引别名, 没有数据时返回空json # 查询所有索引的所有以ab开头的别名 GET /_alias/ab* # 查询索引user的所有别名 GET /users/_alias/* # 查询索引user的所有以ab开头的别名 GET /users/_alias/ab* 通配符*的位置任意放, 也可以有多个* 4. Index alias exists: 检查索引别名是否存在 检查一个或多个索引别名是否存在. 官方文档 HEAD /_alias/<alias> HEAD /<index>/_alias/<alias> 路径参数 <alias> 支持多个索引以英文逗号连接, 支持通配符。 <index> 支持多个索引以英文逗号连接, 支持通配符。 查询参数 同索引别名的获取, 这里省略.... 5. Update index alias: 添加/删除索引别名 添加或删除索引别名。 POST /_aliases { "actions": [ { "add": { "index": "twitter", "alias": "twitter_alias1" } } ] } 查询参数 master_timeout (可选,时间单位)连接到主节点的等待超时时间。如果在超时时间已过之前没有响应, 则返回错误。 默认是值 30s。 timeout (可选,时间单位) 等待超时时间。如果在超时时间已过之前没有响应, 则返回错误。 默认是值 30s。 Request body ES 7.15 对本节内容进行了修正, 结构和描述都更清晰(但是属性列表按字母排序了, 而不是优先级排序), 详见官方文档 actions (必填, json数组对象) 要执行的一系列操作, 可用的action(json的key)包括: add 给索引添加一个别名 remove 从指定的索引移除一个别名 remove_index 删除一个索引或索引别名, 类似删除索引api 这些action的属性可以为空. 可用的属性包括: index: 带通配符的表达式. 当参数indices没有指定时必填. indices: 索引名称数组. 当参数index没有指定时必填. alias: 逗号连接的多个别名, 或带通配符的表达式. 当参数aliases没有指定时必填. aliases: 索引别名的数组. 当参数alias没有指定时必填. filter: 使用Filter query过滤别名. is_hidden: 如果设置为true, 默认将从通配符表达式中排除别名,除非在请求中使用expand_wildcards参数重写别名,类似于hidden indices。对于共享一个别名的素有索引来说, 这个属性必须设置成相同的值。默认是false。 is_write_index: 如果为true,则将此索引指定为该别名下的写索引。 默认值为false。 一个别名同时只能存在一个写索引。参考write index routing: 用于将操作路由到特定分片的自定义路由值。 参考 Routing index_routing: 用于别名索引操作的自定义路由值。 search_routing: 用于别名搜索操作的自定义路由值。 栗子 1. 添加别名(Add an alias) # 添加别名 POST /_aliases { "actions":[ { "remove":{ "index": "my_index", "alias": "my_index_alias1" } } ] } 2.移除一个别名(Remove an alias) # 移除别名 POST /_aliases { "actions":[ { "remove":{ "index": "my_index", "alias": "my_index_alias1" } } ] } 3. 别名重命名(Rename an alias) Rename = Remove + Add 重命名实际上是两个操作: 先删除, 后添加, 可以一起操作. 而且这是一个原子操作, 不会出现短时间内别名无法使用的情况 # 别名重命名: 删除 + 添加 POST /_aliases { "actions":[ { "remove":{ "index": "my_index", "alias": "my_index_alias1" } }, { "add":{ "index": "my_index", "alias": "my_index_alias_1" } } ] } 4. 同时给多个索引添加别名 同时给多个索引添加不同的别名 # 同时给多个索引添加不同的别名(这个写法也支持添加相同的别名) POST /_aliases { "actions":[ { "add": { "index": "my_index", "alias": "my_index_alias1" } }, { "add":{ "index": "my_index2", "alias": "my_index2_alias1" } } ] } 同时给多个索引添加相同的别名 同时给多个索引添加相同的别名 POST /_aliases { "actions":[ { "add":{ "index": "my_index", "alias": "alias1" } }, { "add":{ "index": "my_index2", "alias": "alias1" } } ] } 同时给多个索引添加相同的别名时, 可以直接设置一个indices数组以取代多个add操作: # 同时给多个索引添加相同的别名, 可以使用indices数组以取代多个add操作 POST /_aliases { "actions":[ { "add":{ "indices": ["test1", "test2"], "alias": "alias1" } } ] } 也可以对index使用通配符来同时给一批索引添加同一个别名: # 添加多个索引 PUT /test1 PUT /test2 PUT /test3 # 查看索引 GET /test* # 批量添加别名 POST /_aliases { "actions":[ { "add":{ "index": "test*", "alias": "all_test_indices" } } ] } # 查看索引, 我们会看到这三个以test开头的索引都有一个相同的别名 GET /test* 我们还可以交换(swap)一个索引和一个索引别名的名字, 而且是一个原子操作, 这不会出现短时间内别名无法使用的情况. # 我们先建了一个索引`log`, 但是这个是错误的 PUT /log # 现在建立了正确的索引`log_001`, 但是我现在想把那个索引名称`log`给这个当别名 PUT /log_001 # 我们可以使用如下的原子操作, 保证服务不会中断 POST /_aliases { "actions":[ { "add": { "index": "log_001", "alias": "log" } }, { "remove_index":{ "index": "log" } } ] } # 查看索引/别名, 我们我们会发现别名log也指向了log_001 GET /log_001,log 5. 过滤别名(Filter aliases) 带过滤器的别名提供了一种简单的创建一个索引的不同“视图”的方法。 该过滤器可以使用Query DSL定义,并应用于使用此别名的所有搜索、计数、按查询删除等操作。 我们先创建一个索引, 然后使用filter条件建立一个索引别名 # 创建一个索引, 包含字段 user PUT /test1 { "mappings": { "properties": { "user":{ "type": "keyword" } } } } # 然后我们对字段user建"视图": 使用条件 user="kimchy" 的全匹配, 添加过滤别名 POST /_aliases { "actions":[ { "add":{ "index": "test1", "alias": "test1_kimchy", "filter":{ "term":{ "user": "kimchy" } } } } ] } 好了, 现在如果我们查询索引别名test1_kimchy, 则只显示test1中 user="kimchy" 的文档 6. 路由(Routing) 可以将路由值(routing values)与别名关联起来, 还可以与过滤别名(filter aliases)一起使用以减少不必要的分片操作. 我们给索引test建一个别名alias1, 定义这个别名的操作都自动指向路由值为"1"的分片. POST /_aliases { "actions":[ { "add":{ "index": "test", "alias": "alias1", "routing": "1" } } ] } 也可以按操作区分搜索(searching)和索引(indexing)分别指向不同的路由: POST /_aliases { "actions":[ { "add":{ "index": "test", "alias": "alias1", "search_routing": "1,2", "index_routing": "1" } } ] } 上面的例子中,搜索路由包含多个用逗号分隔的值,索引路由只包含一个值。 If a search operation that uses routing alias also has a routing parameter, an intersection of both search alias routing and routing specified in the parameter is used. For example the following command will use "2" as a routing value: 如果使用路由别名的搜索操作也有路由参数,则使用搜索别名路由和参数中指定的路由的交集。 例如,下面的命令将使用"2"作为路由值: GET /alias2/_search?q=user:kimchy&routing=2,3 alias2的search_routing是"1,2", 而上面的搜索命令中指定"2,3", 他们的交集是 "2" 7. 写索引(Write index) 可以关联设置别名所指向的索引为写索引。 指定后,指向多个索引的别名的所有索引(index, 动词)和更新(update)请求将尝试解析到那个写索引。 每次只能为每个别名分配一个索引作为写索引。 如果没有指定写索引,并且别名引用了多个索引,则不允许写。 可以使用aliases API和创建索引API将与别名关联的索引指定为写索引。 Setting an index to be the write index with an alias also affects how the alias is manipulated during Rollover 通过别名来设置一个索引为写索引会影响在Rollover期间如何操作别名, 参考 Rollover With Write Index POST /_aliases { "actions":[ { "add":{ "index": "test", "alias": "alias1", "is_write_index": true } }, { "add":{ "index": "test2", "alias": "alias1" } } ] } 这个例子中, 我们把别名alias1同时执行索引test和test2, 但是只指定索引test为写索引. PUT /alias1/_doc/1 { "foo": "bar" } 然后通过别名alias1的写和索引操作将指向索引test, 上面的代码会把id=1的文档写入索引test中: GET /test/_doc/1 To swap which index is the write index for an alias, the Aliases API can be leveraged to do an atomic swap. The swap is not dependent on the ordering of the actions. 要在一个别名所指向的多个索引之间交换写索引的设置, 可以利用Aliases API来执行原子交换。 交换不依赖于操作的顺序。 POST /_aliases { "actions":[ { "add": { "index": "test", "alias": "alias1", "is_write_index": false } }, { "add": { "index": "test2", "alias": "alias1", "is_write_index": true } } ] } last update at 2021/10/25 23:17

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册