设置参数 `node.name` 可以自定义 Elasticsearch 节点的名字。 此条 Tips 由 medcl 贡献。

INFINI Labs 产品更新 | Easysearch 支持 SQL 查询、Console 告警功能支持邮件等多渠道

release

INFINI Labs 产品又更新啦~。本次更新概要如下:Easysearch 新增 SQL 插件和JDBC 驱动,支持 SQL 查询,支持 SQL 常用函数等;Console 针对告警功能做了升级优化,新增了邮件渠道,支持自定义邮件服务器配置,以及支持飞书、钉钉、企业微信、Discord、Slack 等多渠道 Webhook 发送告警通知,优化平台概览 UI 界面、展示效果更简单友好,提高了用户体验。欢迎大家下载使用。

INFINI Easysearch v1.5.0

INFINI Easysearch 是一个分布式的近实时搜索与分析引擎,核心引擎基于开源的 Apache Lucene。Easysearch 的目标是提供一个轻量级的 Elasticsearch 可替代版本,并继续完善和支持更多的企业级功能。

Easysearch 本次更新如下:

Features

  • 增加 SQL 插件,支持使用 REST 接口和 JDBC 进行 SQL 查询
  • 支持 SQL 常用函数、包括数学函数、三角函数、日期函数、字符串函数、聚合函数等
  • SQL 语句可以嵌入全文检索
  • 增加 JDBC 驱动,可以通过用户密码或证书连接到集群

Bug fix

  • 修复 kNN 插件的配置项导致非 kNN 索引的 setting 不能正常解析的 Bug

INFINI Console v1.6.0

INFINI Console 是一款非常轻量级的多集群、跨版本的搜索基础设施统一管控平台。通过对流行的搜索引擎基础设施进行跨版本、多集群的集中纳管, 企业可以快速方便的统一管理企业内部的不同版本的多套搜索集群。Console 在线体验:http://demo.infini.cloud (用户名/密码:readonly/readonly)。

Console 本次主要更新如下:

1、告警功能重磅更新

该版本主要更新告警规则和渠道,Console 内置了常用的告警规则和渠道,支持邮件、飞书、钉钉、企业微信、Slack、Discord 等渠道,下载安装部署后仅需在 Console 界面菜单 [告警管理->告警渠道] 配置相关渠道的 Webhook 链接或者邮件服务器并启用渠道开关,无需做额外操作即可接收告警通知消息,我们的目标是做到开箱即用,简单实用。

1.1 支持邮件渠道

通过配置邮件渠道,设置相关收件人、邮件内容模式(支持纯文本与 HTML)等参数,并将邮件渠道绑定到告警规则,当告警事件触发时,告警消息将被发送到相关收件人邮箱。通过增加邮件渠道有效提升了告警消息触达能力,让用户第一时间接受和处理问题。邮件渠道配置界面如下图所示:

1.2 全面优化告警通知效果

本次更新 Console 默认内置了告警渠道通知消息内容模板,通过系统环境变量及告警上下文变量组合成消息内容,用户无需修改即可复用,也可以自定义修改。各渠道通知消息效果如下图所示:

email feishu dingtalk

1.3 告警功能演示视频

请查看 演示视频

2、优化平台概览 UI、新界面更简单友好

本次更新优化了平台概览中的集群、节点、索引、主机列表的展示效果,统一风格,突出关键指标显示,提供了卡片和表格两种展示模式,可以按需切换查看。UI 效果如下所示:

Console 详细更新如下:

Features

  • 优化平台概览 UI 界面、支持卡片和表格样式切换展示
  • 告警规则新增告警恢复通知配置
  • 告警渠道新增邮件通知
  • 告警规则和告警渠道新增导入导出
  • 新增邮件服务器

Bug fix

  • 修复数据探索切换视图排序失效的问题

Improvements

  • 调整告警规则渠道配置
  • 调整饼图样式

INFINI Agent v0.6.1

INFINI Agent 是 INFINI Console 的一个可选探针组件,负责采集和上传集群指标和日志等信息,并可通过 Console 管理。Agent 支持主流操作系统和平台,安装包轻量且无任何外部依赖,可以快速方便地安装。

Agent 本次更新如下:

Bug fix

  • 修复发现节点进程信息时获取 ES 节点端口不对的问题

期待反馈

欢迎下载体验使用,如果您在使用过程中遇到如何疑问或者问题,欢迎前往 INFINI Labs Github(https://github.com/infinilabs) 中的对应项目中提交 Feature Request 或提交 Bug。

您还可以通过邮件联系我们:hello@infini.ltd

或者拨打我们的热线电话:(+86) 400-139-9200

欢迎加入 Discord 聊天室:https://discord.com/invite/4tKTMkkvVX

也欢迎大家微信扫码添加小助手(INFINI-Labs),加入用户群一起讨论交流。

联系我们

关于极限科技(INFINI Labs)

INFINI Labs

极限科技,全称极限数据(北京)科技有限公司,是一家专注于实时搜索与数据分析的软件公司。旗下品牌极限实验室(INFINI Labs)致力于打造极致易用的数据探索与分析体验。

极限科技是一支年轻的团队,采用天然分布式的方式来进行远程协作,员工分布在全球各地,希望通过努力成为中国乃至全球企业大数据实时搜索分析产品的首选,为中国技术品牌输出添砖加瓦。

官网:https://www.infinilabs.com

继续阅读 »

release

INFINI Labs 产品又更新啦~。本次更新概要如下:Easysearch 新增 SQL 插件和JDBC 驱动,支持 SQL 查询,支持 SQL 常用函数等;Console 针对告警功能做了升级优化,新增了邮件渠道,支持自定义邮件服务器配置,以及支持飞书、钉钉、企业微信、Discord、Slack 等多渠道 Webhook 发送告警通知,优化平台概览 UI 界面、展示效果更简单友好,提高了用户体验。欢迎大家下载使用。

INFINI Easysearch v1.5.0

INFINI Easysearch 是一个分布式的近实时搜索与分析引擎,核心引擎基于开源的 Apache Lucene。Easysearch 的目标是提供一个轻量级的 Elasticsearch 可替代版本,并继续完善和支持更多的企业级功能。

Easysearch 本次更新如下:

Features

  • 增加 SQL 插件,支持使用 REST 接口和 JDBC 进行 SQL 查询
  • 支持 SQL 常用函数、包括数学函数、三角函数、日期函数、字符串函数、聚合函数等
  • SQL 语句可以嵌入全文检索
  • 增加 JDBC 驱动,可以通过用户密码或证书连接到集群

Bug fix

  • 修复 kNN 插件的配置项导致非 kNN 索引的 setting 不能正常解析的 Bug

INFINI Console v1.6.0

INFINI Console 是一款非常轻量级的多集群、跨版本的搜索基础设施统一管控平台。通过对流行的搜索引擎基础设施进行跨版本、多集群的集中纳管, 企业可以快速方便的统一管理企业内部的不同版本的多套搜索集群。Console 在线体验:http://demo.infini.cloud (用户名/密码:readonly/readonly)。

Console 本次主要更新如下:

1、告警功能重磅更新

该版本主要更新告警规则和渠道,Console 内置了常用的告警规则和渠道,支持邮件、飞书、钉钉、企业微信、Slack、Discord 等渠道,下载安装部署后仅需在 Console 界面菜单 [告警管理->告警渠道] 配置相关渠道的 Webhook 链接或者邮件服务器并启用渠道开关,无需做额外操作即可接收告警通知消息,我们的目标是做到开箱即用,简单实用。

1.1 支持邮件渠道

通过配置邮件渠道,设置相关收件人、邮件内容模式(支持纯文本与 HTML)等参数,并将邮件渠道绑定到告警规则,当告警事件触发时,告警消息将被发送到相关收件人邮箱。通过增加邮件渠道有效提升了告警消息触达能力,让用户第一时间接受和处理问题。邮件渠道配置界面如下图所示:

1.2 全面优化告警通知效果

本次更新 Console 默认内置了告警渠道通知消息内容模板,通过系统环境变量及告警上下文变量组合成消息内容,用户无需修改即可复用,也可以自定义修改。各渠道通知消息效果如下图所示:

email feishu dingtalk

1.3 告警功能演示视频

请查看 演示视频

2、优化平台概览 UI、新界面更简单友好

本次更新优化了平台概览中的集群、节点、索引、主机列表的展示效果,统一风格,突出关键指标显示,提供了卡片和表格两种展示模式,可以按需切换查看。UI 效果如下所示:

Console 详细更新如下:

Features

  • 优化平台概览 UI 界面、支持卡片和表格样式切换展示
  • 告警规则新增告警恢复通知配置
  • 告警渠道新增邮件通知
  • 告警规则和告警渠道新增导入导出
  • 新增邮件服务器

Bug fix

  • 修复数据探索切换视图排序失效的问题

Improvements

  • 调整告警规则渠道配置
  • 调整饼图样式

INFINI Agent v0.6.1

INFINI Agent 是 INFINI Console 的一个可选探针组件,负责采集和上传集群指标和日志等信息,并可通过 Console 管理。Agent 支持主流操作系统和平台,安装包轻量且无任何外部依赖,可以快速方便地安装。

Agent 本次更新如下:

Bug fix

  • 修复发现节点进程信息时获取 ES 节点端口不对的问题

期待反馈

欢迎下载体验使用,如果您在使用过程中遇到如何疑问或者问题,欢迎前往 INFINI Labs Github(https://github.com/infinilabs) 中的对应项目中提交 Feature Request 或提交 Bug。

您还可以通过邮件联系我们:hello@infini.ltd

或者拨打我们的热线电话:(+86) 400-139-9200

欢迎加入 Discord 聊天室:https://discord.com/invite/4tKTMkkvVX

也欢迎大家微信扫码添加小助手(INFINI-Labs),加入用户群一起讨论交流。

联系我们

关于极限科技(INFINI Labs)

INFINI Labs

极限科技,全称极限数据(北京)科技有限公司,是一家专注于实时搜索与数据分析的软件公司。旗下品牌极限实验室(INFINI Labs)致力于打造极致易用的数据探索与分析体验。

极限科技是一支年轻的团队,采用天然分布式的方式来进行远程协作,员工分布在全球各地,希望通过努力成为中国乃至全球企业大数据实时搜索分析产品的首选,为中国技术品牌输出添砖加瓦。

官网:https://www.infinilabs.com

收起阅读 »

社区日报 第1681期 (2023-08-10)

1.在 Bizzabo 我们是如何水平扩展 Elasticsearch 的(需要梯子)
https://medium.com/%40nizanifr ... 57904
2.提高 Elasticsearch 中近期文档的查询权重(需要梯子)
https://medium.com/%40abhishek ... 63cf4
3.Elastic APM 集成 OpenTelemetry(需要梯子)
https://faun.pub/elastic-apm-a ... cdad9

编辑:Se7en
归档:https://ela.st/cn-daily-all
订阅:https://ela.st/cn-daily-sub
沙龙:https://ela.st/cn-meetup
B站: https://ela.st/bilibili
继续阅读 »
1.在 Bizzabo 我们是如何水平扩展 Elasticsearch 的(需要梯子)
https://medium.com/%40nizanifr ... 57904
2.提高 Elasticsearch 中近期文档的查询权重(需要梯子)
https://medium.com/%40abhishek ... 63cf4
3.Elastic APM 集成 OpenTelemetry(需要梯子)
https://faun.pub/elastic-apm-a ... cdad9

编辑:Se7en
归档:https://ela.st/cn-daily-all
订阅:https://ela.st/cn-daily-sub
沙龙:https://ela.st/cn-meetup
B站: https://ela.st/bilibili 收起阅读 »

社区日报 第1680期 (2023-08-09)

1.干货 | 详述 Elasticsearch 向量检索发展史
https://mp.weixin.qq.com/s/ptjciKeNGA4ohQPzSKZcNg
2.探索ES高可用:滴滴自研跨数据中心复制技术详解
https://mp.weixin.qq.com/s/yNiEj8rjXCB20OuYdmf2zw
3.Elasticsearch:语义搜索 - Semantic Search in python
https://blog.csdn.net/UbuntuTo ... 19884

编辑:kin122
归档:https://ela.st/cn-daily-all
订阅:https://ela.st/cn-daily-sub
沙龙:https://ela.st/cn-meetup
B站:https://ela.st/bilibili
继续阅读 »
1.干货 | 详述 Elasticsearch 向量检索发展史
https://mp.weixin.qq.com/s/ptjciKeNGA4ohQPzSKZcNg
2.探索ES高可用:滴滴自研跨数据中心复制技术详解
https://mp.weixin.qq.com/s/yNiEj8rjXCB20OuYdmf2zw
3.Elasticsearch:语义搜索 - Semantic Search in python
https://blog.csdn.net/UbuntuTo ... 19884

编辑:kin122
归档:https://ela.st/cn-daily-all
订阅:https://ela.st/cn-daily-sub
沙龙:https://ela.st/cn-meetup
B站:https://ela.st/bilibili 收起阅读 »

社区日报 第1679期 (2023-08-08)


1. ES 的翻页咋弄?(需要梯子)
https://medium.com/%40yashwant ... 5f5d6
2. 云服务监控大师秘籍(需要梯子)
https://blog.devops.dev/master ... 822ce
3. ChatGPT + ES = 猴赛雷的搜索体验!(需要梯子)
https://medium.com/gitconnecte ... ef65d
编辑:斯蒂文
归档:https://ela.st/cn-daily-all
订阅:https://ela.st/cn-daily-sub
沙龙:https://ela.st/cn-meetup
B站: https://ela.st/bilibili
 
继续阅读 »

1. ES 的翻页咋弄?(需要梯子)
https://medium.com/%40yashwant ... 5f5d6
2. 云服务监控大师秘籍(需要梯子)
https://blog.devops.dev/master ... 822ce
3. ChatGPT + ES = 猴赛雷的搜索体验!(需要梯子)
https://medium.com/gitconnecte ... ef65d
编辑:斯蒂文
归档:https://ela.st/cn-daily-all
订阅:https://ela.st/cn-daily-sub
沙龙:https://ela.st/cn-meetup
B站: https://ela.st/bilibili
  收起阅读 »

社区日报 第1678期 (2023-08-07)

Elastic日报 第1678期 (2023-08-07)
1. Elasticsearch 什么是矢量搜索以及它如何改进搜索结果
   https://elasticstack.blog.csdn ... 81122
2. Elasticsearch 性能测试工具rally深入详解
   https://blog.51cto.com/elasticsearch/5686527
3. 微信全文搜索耗时降94%?我们用了这种方案
   https://mp.weixin.qq.com/s/y4lynJgHNonbb7s8YfERDg
编辑:yuebancanghai
归档:https://ela.st/cn-daily-all
订阅:https://ela.st/cn-daily-sub
沙龙:https://ela.st/cn-meetup
B站:https://ela.st/bilibili
继续阅读 »
Elastic日报 第1678期 (2023-08-07)
1. Elasticsearch 什么是矢量搜索以及它如何改进搜索结果
   https://elasticstack.blog.csdn ... 81122
2. Elasticsearch 性能测试工具rally深入详解
   https://blog.51cto.com/elasticsearch/5686527
3. 微信全文搜索耗时降94%?我们用了这种方案
   https://mp.weixin.qq.com/s/y4lynJgHNonbb7s8YfERDg
编辑:yuebancanghai
归档:https://ela.st/cn-daily-all
订阅:https://ela.st/cn-daily-sub
沙龙:https://ela.st/cn-meetup
B站:https://ela.st/bilibili 收起阅读 »

社区日报 第1677期 (2023-08-03)

1.Elasticsearch 源码探究 001——故障探测和恢复机制
https://mp.weixin.qq.com/s/h1sZYtyLIJr__Akv0YMC0w
2.Elastic 可观测解决方案 8.9:发布可观测 AI 助手
https://mp.weixin.qq.com/s/XcACwf_ysTcYUxXgQiMP6A
3.奇怪!我的 java 程序只能扛住高并发却扛不住低并发
https://mp.weixin.qq.com/s/Yo8jgxkRO-EKOn4T7IqQCA

编辑:Se7en
归档:https://ela.st/cn-daily-all
订阅:https://ela.st/cn-daily-sub
沙龙:https://ela.st/cn-meetup
B站: https://ela.st/bilibili
继续阅读 »
1.Elasticsearch 源码探究 001——故障探测和恢复机制
https://mp.weixin.qq.com/s/h1sZYtyLIJr__Akv0YMC0w
2.Elastic 可观测解决方案 8.9:发布可观测 AI 助手
https://mp.weixin.qq.com/s/XcACwf_ysTcYUxXgQiMP6A
3.奇怪!我的 java 程序只能扛住高并发却扛不住低并发
https://mp.weixin.qq.com/s/Yo8jgxkRO-EKOn4T7IqQCA

编辑:Se7en
归档:https://ela.st/cn-daily-all
订阅:https://ela.st/cn-daily-sub
沙龙:https://ela.st/cn-meetup
B站: https://ela.st/bilibili 收起阅读 »

社区日报 第1676期 (2023-08-02)

1.Elasticsearch:通过动态修剪实现更快的基数聚合
https://blog.csdn.net/UbuntuTo ... .5501
2.lucene-forcemerge源码解读(一)
https://www.amazingkoala.com.c ... .html
3.lucene-forcemerge源码解读(二)
https://www.amazingkoala.com.c ... .html

编辑:kin122
归档:https://ela.st/cn-daily-all
订阅:https://ela.st/cn-daily-sub
沙龙:https://ela.st/cn-meetup
B站:https://ela.st/bilibili
继续阅读 »
1.Elasticsearch:通过动态修剪实现更快的基数聚合
https://blog.csdn.net/UbuntuTo ... .5501
2.lucene-forcemerge源码解读(一)
https://www.amazingkoala.com.c ... .html
3.lucene-forcemerge源码解读(二)
https://www.amazingkoala.com.c ... .html

编辑:kin122
归档:https://ela.st/cn-daily-all
订阅:https://ela.st/cn-daily-sub
沙龙:https://ela.st/cn-meetup
B站:https://ela.st/bilibili 收起阅读 »

社区日报 第1675期 (2023-08-01)


1. 两分钟计算7KW个价格数据,你会吗?(I)(需要梯子)
https://medium.com/trendyol-te ... b8c3f
2. 两分钟计算7KW个价格数据,不会我教你啊(II)(需要梯子)
https://medium.com/trendyol-te ... ee292
3. Elastic Watcher 冒险:揭开有效错误日志和 API 监控的秘密(需要梯子)
https://medium.com/%40soniyogi ... 462ac
编辑:斯蒂文
归档:https://ela.st/cn-daily-all
订阅:https://ela.st/cn-daily-sub
沙龙:https://ela.st/cn-meetup
B站: https://ela.st/bilibili
 
继续阅读 »

1. 两分钟计算7KW个价格数据,你会吗?(I)(需要梯子)
https://medium.com/trendyol-te ... b8c3f
2. 两分钟计算7KW个价格数据,不会我教你啊(II)(需要梯子)
https://medium.com/trendyol-te ... ee292
3. Elastic Watcher 冒险:揭开有效错误日志和 API 监控的秘密(需要梯子)
https://medium.com/%40soniyogi ... 462ac
编辑:斯蒂文
归档:https://ela.st/cn-daily-all
订阅:https://ela.st/cn-daily-sub
沙龙:https://ela.st/cn-meetup
B站: https://ela.st/bilibili
  收起阅读 »

社区日报 第1674期 (2023-07-31)


1. Elasticsearch:从搜索中获取选定的字段 fields
   https://blog.csdn.net/UbuntuTo ... 53365
2. Elasticsearch 字段field参数
   https://blog.csdn.net/qq_18218 ... 28857
3. Elasticsearch:分片如何影响 Elasticsearch 中的相关性评分
   https://elasticstack.blog.csdn ... 26968
编辑:yuebancanghai
归档:https://ela.st/cn-daily-all
订阅:https://ela.st/cn-daily-sub
沙龙:https://ela.st/cn-meetup
B站:https://ela.st/bilibili
继续阅读 »

1. Elasticsearch:从搜索中获取选定的字段 fields
   https://blog.csdn.net/UbuntuTo ... 53365
2. Elasticsearch 字段field参数
   https://blog.csdn.net/qq_18218 ... 28857
3. Elasticsearch:分片如何影响 Elasticsearch 中的相关性评分
   https://elasticstack.blog.csdn ... 26968
编辑:yuebancanghai
归档:https://ela.st/cn-daily-all
订阅:https://ela.st/cn-daily-sub
沙龙:https://ela.st/cn-meetup
B站:https://ela.st/bilibili 收起阅读 »

社区日报 第1673期 (2023-07-27)

1.使用 Elastic Watcher 对错误日志和 API 调用进行监控(需要梯子)
https://medium.com/%40soniyogi ... 462ac
2.如何将整个 Elasticsearch 索引导出到文件(需要梯子)
https://medium.com/%40disorgan ... 803a0
3.Elasticsearch 和竞争对手的性能基准测试对比(需要梯子)
https://medium.com/gigasearch/ ... 75639

编辑:Se7en
归档:https://ela.st/cn-daily-all
订阅:https://ela.st/cn-daily-sub
沙龙:https://ela.st/cn-meetup
B站: https://ela.st/bilibili
继续阅读 »
1.使用 Elastic Watcher 对错误日志和 API 调用进行监控(需要梯子)
https://medium.com/%40soniyogi ... 462ac
2.如何将整个 Elasticsearch 索引导出到文件(需要梯子)
https://medium.com/%40disorgan ... 803a0
3.Elasticsearch 和竞争对手的性能基准测试对比(需要梯子)
https://medium.com/gigasearch/ ... 75639

编辑:Se7en
归档:https://ela.st/cn-daily-all
订阅:https://ela.st/cn-daily-sub
沙龙:https://ela.st/cn-meetup
B站: https://ela.st/bilibili 收起阅读 »

社区日报 第1672期 (2023-07-26)

1.改进 Elastic Stack 中的信息检索:提高搜索相关性的步骤
https://cloud.tencent.com/deve ... 03563
2.改进 Elastic Stack 中的信息检索:对段落检索进行基准测试
https://cloud.tencent.com/deve ... 03595
3.改进 Elastic Stack 中的信息检索:引入 Elastic Learned Sparse Encoder,我们的新检索模型原创
https://cloud.tencent.com/deve ... 03829

编辑:kin122
归档:https://ela.st/cn-daily-all
订阅:https://ela.st/cn-daily-sub
沙龙:https://ela.st/cn-meetup
B站:https://ela.st/bilibili
继续阅读 »
1.改进 Elastic Stack 中的信息检索:提高搜索相关性的步骤
https://cloud.tencent.com/deve ... 03563
2.改进 Elastic Stack 中的信息检索:对段落检索进行基准测试
https://cloud.tencent.com/deve ... 03595
3.改进 Elastic Stack 中的信息检索:引入 Elastic Learned Sparse Encoder,我们的新检索模型原创
https://cloud.tencent.com/deve ... 03829

编辑:kin122
归档:https://ela.st/cn-daily-all
订阅:https://ela.st/cn-daily-sub
沙龙:https://ela.st/cn-meetup
B站:https://ela.st/bilibili 收起阅读 »

社区日报 第1671期 (2023-07-25)


1. 我们在pelago这样做搜索(需要梯子)
https://medium.com/%40amans.rl ... 3ea3e
2. 担心系统不安全?ES来帮你搭建安全体系(需要梯子)
https://infosecwriteups.com/en ... ba803
3. 安全专家手里的新工具包——ELK(需要梯子)
https://medium.com/%40wenray/t ... d8013

编辑:斯蒂文
归档:https://ela.st/cn-daily-all
订阅:https://ela.st/cn-daily-sub
沙龙:https://ela.st/cn-meetup
B站: https://ela.st/bilibili
 
继续阅读 »

1. 我们在pelago这样做搜索(需要梯子)
https://medium.com/%40amans.rl ... 3ea3e
2. 担心系统不安全?ES来帮你搭建安全体系(需要梯子)
https://infosecwriteups.com/en ... ba803
3. 安全专家手里的新工具包——ELK(需要梯子)
https://medium.com/%40wenray/t ... d8013

编辑:斯蒂文
归档:https://ela.st/cn-daily-all
订阅:https://ela.st/cn-daily-sub
沙龙:https://ela.st/cn-meetup
B站: https://ela.st/bilibili
  收起阅读 »

如何在ES中搜索值为空的键值对

问题背景

今天早上,接到开发那边一个特殊的查询需求,在 Kibana 中搜索一个 json 类型日志中值为一个空大括号的键值对, 具体的日志示例如下:

{
    "clientIp": "10.111.121.51",
    "query": "{}",
    "serviceUrl": "/aaa/bbb/cc",
}

也就是说针对这个类型的日志过滤出 query 值为空的请求 "query": "{}", 开发同学测试了直接在 kibana 中查询这个字符串 "query": "{}" 根本查不到我们想要的结果。 我们使用的是 ELK 8.3 的全家桶, 这个日志数据使用的默认 standard analyzer 的分词器。

初步分析

我们先对这个要查询的字符串进行下分词测试:

GET /_analyze
{
"analyzer" : "standard",
"text": "\"query\":\"{}\""
}

结果不出所料,我们想要空大括号在分词的时候直接就被干掉了,仅保留了 query 这一个 token:

{
  "tokens": [{
    "token": "query",
    "start_offset": 1,
    "end_offset": 6,
    "type": "<ALPHANUM>",
    "position": 0
  }]
}

我们使用的 standard analyzer 在数据写入分词时直接抛弃掉{}等特殊字符,看来直接搜索 "query": "{}" 关键词这条路肯定是走不通。

换个思路

在网上搜索了一下解决的办法,有些搜索特殊字符的办法,但需要修改分词器,我们已经写入的日志数据量比较大,不太愿意因为这个搜索请求来修改分词器再 reindex。 但是我们的日志格式是固定的,serviceUrl 这个键值对总是在 query 后面的,那么我们可以结合前后文实现相同的 搜索效果:

GET /_analyze
{
"analyzer" : "standard",
"text": "\"query\":\"{}\",\"serviceUrl\""
}

可以看到这段被分为 2 个相邻的单词

{
"tokens": [{
"token": "query",
"start_offset": 1,
"end_offset": 6,
"type": "<ALPHANUM>",
"position": 0
},
{
"token": "serviceurl",
"start_offset": 14,
"end_offset": 24,
"type": "<ALPHANUM>",
"position": 1
}
]
}

那么通过搜索 query 和 serviceUrl 为相邻的 2 个字是完全可以实现 query 的值为空的同样的查询效果。 为了确认在我们已经写入的数据中 query 和 serviceurl 也是相邻的,我们通过 ES termvectors API 确认了已经在 es 中的数据和我们这里测试的情况相同:

GET /<index>/_termvectors/<_id>?fields=message

"query" : {
  "term_freq" : 1,
  "tokens" : [
    {
      "position" : 198,
      "start_offset" : 2138,
      "end_offset" : 2143
    }
  ]
},
"serviceurl" : {
  "term_freq" : 1,
  "tokens" : [
    {
      "position" : 199,
      "start_offset" : 2151,
      "end_offset" : 2161
    }
  ]
},

这里我们可以看到 query 在 message 字段里面出现一次,其 end_offset 和 serviceurl 的 start_offset 之前也是相差 8, 和我们测试的结果相同。 这个时候我们就将原来的查询需求,转化为了对 "query serviceurl" 进行按顺序的精准查询就行了, 使用 match_phrase 可以达到我们的目的。

GET /_search
"query": {
    "match_phrase": {
        "message": {
            "query": "query serviceurl",
            "slop" : 0

        }
    }
}

这里顺便说一下,slop 这个参数,slop=n 表示,表示可以隔 n 个字(英文词)进行匹配, 这里设置为 0 就强制要求 query 和 serviceurl 这 2 个单词必须相邻,0 也是 slop 的默认值,在这个请求中是可以省略的,这是为什么 match_phrase 是会获得精准查询的原因之一。 好了,我们通过 console 确定了有效的 query 之后,对于开发同学查看日志只需要在 Kibana 的搜索栏中直接使用双引号引起来的精确搜索 "query serviceurl" 就可以了。

继续深挖一下,ngram 分词器

虽然开发同学搜索的问题解决了,但我仍然不太满意,毕竟这次的问题我们的日志格式是固定的,如果我们一定要搜索到 "query": "{}" 这个应该怎么办呢? 首先很明确,使用我们默认的 standard analyzer 不修改任何参数肯定是不行的,"{}" 这些特殊字符都直接被干掉了, 参考了网上找到的这篇文章,https://blog.csdn.net/fox_233/article/details/127388058 按照这个 ngram 分词器的思路,我动手对我们的需求进行了下测试

首先先看看我们使用 ngram 分词器的分词效果, 我们这里简化了一下,去掉了原来的双引号,以避免过多 \:

GET _analyze
{
  "tokenizer": "ngram",
  "text": "query:{}"
}

{
  "tokens" : [
    {
      "token" : "q",
      "start_offset" : 0,
      "end_offset" : 1,
      "type" : "word",
      "position" : 0
    },
    ...
    {
      "token" : "{",
      "start_offset" : 6,
      "end_offset" : 7,
      "type" : "word",
      "position" : 12
    },
    {
      "token" : "{}",
      "start_offset" : 6,
      "end_offset" : 8,
      "type" : "word",
      "position" : 13
    },
    {
      "token" : "}",
      "start_offset" : 7,
      "end_offset" : 8,
      "type" : "word",
      "position" : 14
    }
  ]
}

可以很明显的看到大括号被成功的分词了,果然是有戏。 直接定义一个 index 实战一下搜索效果

PUT specialchar_debug
{
  "settings": {
    "analysis": {
      "analyzer": {
        "specialchar_analyzer": {
          "tokenizer": "specialchar_tokenizer"
        }
      },
      "tokenizer": {
        "specialchar_tokenizer": {
          "type": "ngram",
          "min_gram": 1,
          "max_gram": 2
        }
      }
    }
  },
  "mappings": {
      "properties": {
        "text": {
          "analyzer": "specialchar_analyzer",
          "type": "text"
        }
      }
    }
}

插入几条测试数据:

PUT specialchar_debug/_doc/1
{  "text": "query:{},serviceUrl"
}

PUT specialchar_debug/_doc/2
{  "text": "query:{aaa},serviceUrl"
}

PUT specialchar_debug/_doc/3
{  "text": "query:{bbb}, ccc, serviceUrl"
}

我们再测试一下搜索效果,

GET specialchar_debug/_search
{
  "query": {
    "match_phrase": {
      "text": "query:{}"
    }
  }
}

结果完全是我们想要的,看来这个方案可行

"hits" : [
  {
    "_index" : "specialchar_debug",
    "_id" : "1",
    "_score" : 2.402917,
    "_source" : {
      "text" : "query:{},serviceUrl"
    }
  }
]

小结

对于日志系统,我们一直在使用 ES 默认的 standard analyzer 的分词器, 基本上满足我们生产遇到的 99% 的需求,但面对特殊字符的这种搜索请求,确实比较无奈。这次遇到的空键值对的需求,我们通过搜索 2 个相邻的键绕过了问题。 如果一定要搜索这个字符串的话,我们也可以使用 ngram 分词器重新进行分词再进行处理, 条条大路通罗马。

作者介绍

卞弘智,研发工程师,10 多年的 SRE 经验,工作经历涵盖 DevOps,日志处理系统,监控和告警系统研发,WAF 和网关等系统基础架构领域,致力于通过优秀的开源软件推动自动化和智能化基础架构平台的演进。

继续阅读 »

问题背景

今天早上,接到开发那边一个特殊的查询需求,在 Kibana 中搜索一个 json 类型日志中值为一个空大括号的键值对, 具体的日志示例如下:

{
    "clientIp": "10.111.121.51",
    "query": "{}",
    "serviceUrl": "/aaa/bbb/cc",
}

也就是说针对这个类型的日志过滤出 query 值为空的请求 "query": "{}", 开发同学测试了直接在 kibana 中查询这个字符串 "query": "{}" 根本查不到我们想要的结果。 我们使用的是 ELK 8.3 的全家桶, 这个日志数据使用的默认 standard analyzer 的分词器。

初步分析

我们先对这个要查询的字符串进行下分词测试:

GET /_analyze
{
"analyzer" : "standard",
"text": "\"query\":\"{}\""
}

结果不出所料,我们想要空大括号在分词的时候直接就被干掉了,仅保留了 query 这一个 token:

{
  "tokens": [{
    "token": "query",
    "start_offset": 1,
    "end_offset": 6,
    "type": "<ALPHANUM>",
    "position": 0
  }]
}

我们使用的 standard analyzer 在数据写入分词时直接抛弃掉{}等特殊字符,看来直接搜索 "query": "{}" 关键词这条路肯定是走不通。

换个思路

在网上搜索了一下解决的办法,有些搜索特殊字符的办法,但需要修改分词器,我们已经写入的日志数据量比较大,不太愿意因为这个搜索请求来修改分词器再 reindex。 但是我们的日志格式是固定的,serviceUrl 这个键值对总是在 query 后面的,那么我们可以结合前后文实现相同的 搜索效果:

GET /_analyze
{
"analyzer" : "standard",
"text": "\"query\":\"{}\",\"serviceUrl\""
}

可以看到这段被分为 2 个相邻的单词

{
"tokens": [{
"token": "query",
"start_offset": 1,
"end_offset": 6,
"type": "<ALPHANUM>",
"position": 0
},
{
"token": "serviceurl",
"start_offset": 14,
"end_offset": 24,
"type": "<ALPHANUM>",
"position": 1
}
]
}

那么通过搜索 query 和 serviceUrl 为相邻的 2 个字是完全可以实现 query 的值为空的同样的查询效果。 为了确认在我们已经写入的数据中 query 和 serviceurl 也是相邻的,我们通过 ES termvectors API 确认了已经在 es 中的数据和我们这里测试的情况相同:

GET /<index>/_termvectors/<_id>?fields=message

"query" : {
  "term_freq" : 1,
  "tokens" : [
    {
      "position" : 198,
      "start_offset" : 2138,
      "end_offset" : 2143
    }
  ]
},
"serviceurl" : {
  "term_freq" : 1,
  "tokens" : [
    {
      "position" : 199,
      "start_offset" : 2151,
      "end_offset" : 2161
    }
  ]
},

这里我们可以看到 query 在 message 字段里面出现一次,其 end_offset 和 serviceurl 的 start_offset 之前也是相差 8, 和我们测试的结果相同。 这个时候我们就将原来的查询需求,转化为了对 "query serviceurl" 进行按顺序的精准查询就行了, 使用 match_phrase 可以达到我们的目的。

GET /_search
"query": {
    "match_phrase": {
        "message": {
            "query": "query serviceurl",
            "slop" : 0

        }
    }
}

这里顺便说一下,slop 这个参数,slop=n 表示,表示可以隔 n 个字(英文词)进行匹配, 这里设置为 0 就强制要求 query 和 serviceurl 这 2 个单词必须相邻,0 也是 slop 的默认值,在这个请求中是可以省略的,这是为什么 match_phrase 是会获得精准查询的原因之一。 好了,我们通过 console 确定了有效的 query 之后,对于开发同学查看日志只需要在 Kibana 的搜索栏中直接使用双引号引起来的精确搜索 "query serviceurl" 就可以了。

继续深挖一下,ngram 分词器

虽然开发同学搜索的问题解决了,但我仍然不太满意,毕竟这次的问题我们的日志格式是固定的,如果我们一定要搜索到 "query": "{}" 这个应该怎么办呢? 首先很明确,使用我们默认的 standard analyzer 不修改任何参数肯定是不行的,"{}" 这些特殊字符都直接被干掉了, 参考了网上找到的这篇文章,https://blog.csdn.net/fox_233/article/details/127388058 按照这个 ngram 分词器的思路,我动手对我们的需求进行了下测试

首先先看看我们使用 ngram 分词器的分词效果, 我们这里简化了一下,去掉了原来的双引号,以避免过多 \:

GET _analyze
{
  "tokenizer": "ngram",
  "text": "query:{}"
}

{
  "tokens" : [
    {
      "token" : "q",
      "start_offset" : 0,
      "end_offset" : 1,
      "type" : "word",
      "position" : 0
    },
    ...
    {
      "token" : "{",
      "start_offset" : 6,
      "end_offset" : 7,
      "type" : "word",
      "position" : 12
    },
    {
      "token" : "{}",
      "start_offset" : 6,
      "end_offset" : 8,
      "type" : "word",
      "position" : 13
    },
    {
      "token" : "}",
      "start_offset" : 7,
      "end_offset" : 8,
      "type" : "word",
      "position" : 14
    }
  ]
}

可以很明显的看到大括号被成功的分词了,果然是有戏。 直接定义一个 index 实战一下搜索效果

PUT specialchar_debug
{
  "settings": {
    "analysis": {
      "analyzer": {
        "specialchar_analyzer": {
          "tokenizer": "specialchar_tokenizer"
        }
      },
      "tokenizer": {
        "specialchar_tokenizer": {
          "type": "ngram",
          "min_gram": 1,
          "max_gram": 2
        }
      }
    }
  },
  "mappings": {
      "properties": {
        "text": {
          "analyzer": "specialchar_analyzer",
          "type": "text"
        }
      }
    }
}

插入几条测试数据:

PUT specialchar_debug/_doc/1
{  "text": "query:{},serviceUrl"
}

PUT specialchar_debug/_doc/2
{  "text": "query:{aaa},serviceUrl"
}

PUT specialchar_debug/_doc/3
{  "text": "query:{bbb}, ccc, serviceUrl"
}

我们再测试一下搜索效果,

GET specialchar_debug/_search
{
  "query": {
    "match_phrase": {
      "text": "query:{}"
    }
  }
}

结果完全是我们想要的,看来这个方案可行

"hits" : [
  {
    "_index" : "specialchar_debug",
    "_id" : "1",
    "_score" : 2.402917,
    "_source" : {
      "text" : "query:{},serviceUrl"
    }
  }
]

小结

对于日志系统,我们一直在使用 ES 默认的 standard analyzer 的分词器, 基本上满足我们生产遇到的 99% 的需求,但面对特殊字符的这种搜索请求,确实比较无奈。这次遇到的空键值对的需求,我们通过搜索 2 个相邻的键绕过了问题。 如果一定要搜索这个字符串的话,我们也可以使用 ngram 分词器重新进行分词再进行处理, 条条大路通罗马。

作者介绍

卞弘智,研发工程师,10 多年的 SRE 经验,工作经历涵盖 DevOps,日志处理系统,监控和告警系统研发,WAF 和网关等系统基础架构领域,致力于通过优秀的开源软件推动自动化和智能化基础架构平台的演进。

收起阅读 »

社区日报 第1670期 (2023-07-24)

1. 在 Elasticsearch 中选择 b 和 k1 的注意事项
   https://blog.csdn.net/UbuntuTo ... 68368
2. Elasticsearch:实用 BM25算法及其变量
   https://elasticstack.blog.csdn ... 39480
3. Elasticsearch 倒排索引与相关性算法计算
   https://zhuanlan.zhihu.com/p/91603911
编辑:yuebancanghai
归档:https://ela.st/cn-daily-all
订阅:https://ela.st/cn-daily-sub
沙龙:https://ela.st/cn-meetup
B站:https://ela.st/bilibili
继续阅读 »
1. 在 Elasticsearch 中选择 b 和 k1 的注意事项
   https://blog.csdn.net/UbuntuTo ... 68368
2. Elasticsearch:实用 BM25算法及其变量
   https://elasticstack.blog.csdn ... 39480
3. Elasticsearch 倒排索引与相关性算法计算
   https://zhuanlan.zhihu.com/p/91603911
编辑:yuebancanghai
归档:https://ela.st/cn-daily-all
订阅:https://ela.st/cn-daily-sub
沙龙:https://ela.st/cn-meetup
B站:https://ela.st/bilibili 收起阅读 »

INFINI Labs 产品更新 | Easysearch 新增分词插件、Gateway 支持邮件发送等功能

INFINI Labs 产品又更新啦~,本次更新概要如下:Easysearch 新增了分词插件、优化了生命周期管理功能等;Gateway 新增 smtp 过滤器来支持邮件的发送,支持自动跳过因为异常关闭而损坏的磁盘队列文件等;Console 新增熔断器监控指标、新增矩形树图(Treemap)、优化了探针 Agent 指标采集和集群自动关联操作等。欢迎大家下载体验。

INFINI Easysearch v1.4.0

INFINI Easysearch 是一个分布式的近实时搜索与分析引擎,核心引擎基于开源的 Apache Lucene。Easysearch 衍生自基于开源协议 Apache 2.0 的 Elasticsearch 7.10 版本。Easysearch 的目标是提供一个轻量级的 Elasticsearch 可替代版本,并继续完善和支持更多的企业级功能。

Easysearch 本次更新如下:

Features

  • 索引生命周期管理增加 wait_for_snapshot 操作,在删除索引之前,等待执行指定的快照管理策略,这样可以确保已删除索引的快照可用
  • 增加 analysis-hanlp 分词插件
  • 增加 jieba 分词插件

Bug fix

  • 修复启用 index.source_reuse 时,对复杂多层 json 的 source 字段 解析不正确的 Bug

Improvements

  • 更新索引生命周期管理 api 文档,增加策略应用和更新说明,增加 wait_for_snapshot 说明
  • 执行 initialize.sh 命令时增加初始化确认提示,是否将 admin 密码记录日志

INFINI Gateway v1.17.0

INFINI Gateway 是一个面向搜索场景的高性能数据网关,所有请求都经过网关处理后再转发到后端的搜索业务集群。基于 INFINI Gateway 可以实现索引级别的限速限流、常见查询的缓存加速、查询请求的审计、查询结果的动态修改等等。

Gateway 本次更新如下:

Features

  • 新增 consumer Processor 来标准化订阅消息队列
  • 新增 smtp 过滤器来支持邮件的发送

Bug fix

  • 支持自动跳过因为异常关闭而损坏的磁盘队列文件

INFINI Console v1.4.0

INFINI Console 是一款非常轻量级的多集群、跨版本的搜索基础设施统一管控平台。通过对流行的搜索引擎基础设施进行跨版本、多集群的集中纳管, 企业可以快速方便的统一管理企业内部的不同版本的多套搜索集群。

Console 在线体验: http://demo.infini.cloud (用户名/密码:readonly/readonly)。

Console 本次更新如下:

Features

  • 新增熔断器监控指标
  • 网关队列管理支持多选删除消费者
  • 数据看板新增组件矩形树图

Bug fix

  • 修复开发工具智能提示兼容性问题
  • 修复探针列表状态显示异常的问题
  • 修复探针列表分页不生效的问题
  • 修复数据看板 统计函数显示不对的问题
  • 修复探针下发采集指标配置重复的问题
  • 修复数据看板设置过滤条件不生效的问题
  • 修复主机列表探针状态不对的问题
  • 修复网关管理删除队列不成功的问题
  • 修复数据探索当前集群没索引时跳转的问题
  • 修复数据看板编辑状态下点击事件的问题

Improvements

  • 探针进程关联支持通过选择集群自动关联,简化操作
  • 探针列表支持排序
  • 探针支持向上滚动查看节点日志
  • 采集监控指标添加 cluster_uuid 信息
  • 数据看板支持配置指标排序

INFINI Agent v0.6.0

INFINI Agent 是 INFINI Console 的一个可选探针组件,负责采集和上传集群指标和日志等信息,并可通过 Console 管理。Agent 支持主流操作系统和平台,安装包轻量且无任何外部依赖,可以快速方便地安装。

Agent 本次更新如下:

Features

  • 采集监控指标添加 cluster_uuid 信息

Improvements

  • 修复发现节点进程信息时获取不到最新集群配置的问题

期待反馈

欢迎下载体验使用,如果您在使用过程中遇到如何疑问或者问题,欢迎前往 INFINI Labs Github(https://github.com/infinilabs) 中的对应项目中提交 Feature Request 或提交 Bug。

或者通过 Discord 渠道加入聊天室:https://discord.com/invite/tnZ8S5vQ

欢迎大家微信扫码添加小助手(INFINI-Labs),加入用户群讨论,或者扫码加入我们的知识星球一起学习交流。

联系我们

关于极限科技(INFINI Labs)

关于极限科技

极限科技,全称极限数据(北京)科技有限公司,是一家专注于实时搜索与数据分析的软件公司。旗下品牌极限实验室(INFINI Labs)致力于打造极致易用的数据探索与分析体验。

极限科技是一支年轻的团队,采用天然分布式的方式来进行远程协作,员工分布在全球各地,希望通过努力成为中国乃至全球企业大数据实时搜索分析产品的首选,为中国技术品牌输出添砖加瓦。

官网:https://www.infinilabs.com

继续阅读 »

INFINI Labs 产品又更新啦~,本次更新概要如下:Easysearch 新增了分词插件、优化了生命周期管理功能等;Gateway 新增 smtp 过滤器来支持邮件的发送,支持自动跳过因为异常关闭而损坏的磁盘队列文件等;Console 新增熔断器监控指标、新增矩形树图(Treemap)、优化了探针 Agent 指标采集和集群自动关联操作等。欢迎大家下载体验。

INFINI Easysearch v1.4.0

INFINI Easysearch 是一个分布式的近实时搜索与分析引擎,核心引擎基于开源的 Apache Lucene。Easysearch 衍生自基于开源协议 Apache 2.0 的 Elasticsearch 7.10 版本。Easysearch 的目标是提供一个轻量级的 Elasticsearch 可替代版本,并继续完善和支持更多的企业级功能。

Easysearch 本次更新如下:

Features

  • 索引生命周期管理增加 wait_for_snapshot 操作,在删除索引之前,等待执行指定的快照管理策略,这样可以确保已删除索引的快照可用
  • 增加 analysis-hanlp 分词插件
  • 增加 jieba 分词插件

Bug fix

  • 修复启用 index.source_reuse 时,对复杂多层 json 的 source 字段 解析不正确的 Bug

Improvements

  • 更新索引生命周期管理 api 文档,增加策略应用和更新说明,增加 wait_for_snapshot 说明
  • 执行 initialize.sh 命令时增加初始化确认提示,是否将 admin 密码记录日志

INFINI Gateway v1.17.0

INFINI Gateway 是一个面向搜索场景的高性能数据网关,所有请求都经过网关处理后再转发到后端的搜索业务集群。基于 INFINI Gateway 可以实现索引级别的限速限流、常见查询的缓存加速、查询请求的审计、查询结果的动态修改等等。

Gateway 本次更新如下:

Features

  • 新增 consumer Processor 来标准化订阅消息队列
  • 新增 smtp 过滤器来支持邮件的发送

Bug fix

  • 支持自动跳过因为异常关闭而损坏的磁盘队列文件

INFINI Console v1.4.0

INFINI Console 是一款非常轻量级的多集群、跨版本的搜索基础设施统一管控平台。通过对流行的搜索引擎基础设施进行跨版本、多集群的集中纳管, 企业可以快速方便的统一管理企业内部的不同版本的多套搜索集群。

Console 在线体验: http://demo.infini.cloud (用户名/密码:readonly/readonly)。

Console 本次更新如下:

Features

  • 新增熔断器监控指标
  • 网关队列管理支持多选删除消费者
  • 数据看板新增组件矩形树图

Bug fix

  • 修复开发工具智能提示兼容性问题
  • 修复探针列表状态显示异常的问题
  • 修复探针列表分页不生效的问题
  • 修复数据看板 统计函数显示不对的问题
  • 修复探针下发采集指标配置重复的问题
  • 修复数据看板设置过滤条件不生效的问题
  • 修复主机列表探针状态不对的问题
  • 修复网关管理删除队列不成功的问题
  • 修复数据探索当前集群没索引时跳转的问题
  • 修复数据看板编辑状态下点击事件的问题

Improvements

  • 探针进程关联支持通过选择集群自动关联,简化操作
  • 探针列表支持排序
  • 探针支持向上滚动查看节点日志
  • 采集监控指标添加 cluster_uuid 信息
  • 数据看板支持配置指标排序

INFINI Agent v0.6.0

INFINI Agent 是 INFINI Console 的一个可选探针组件,负责采集和上传集群指标和日志等信息,并可通过 Console 管理。Agent 支持主流操作系统和平台,安装包轻量且无任何外部依赖,可以快速方便地安装。

Agent 本次更新如下:

Features

  • 采集监控指标添加 cluster_uuid 信息

Improvements

  • 修复发现节点进程信息时获取不到最新集群配置的问题

期待反馈

欢迎下载体验使用,如果您在使用过程中遇到如何疑问或者问题,欢迎前往 INFINI Labs Github(https://github.com/infinilabs) 中的对应项目中提交 Feature Request 或提交 Bug。

或者通过 Discord 渠道加入聊天室:https://discord.com/invite/tnZ8S5vQ

欢迎大家微信扫码添加小助手(INFINI-Labs),加入用户群讨论,或者扫码加入我们的知识星球一起学习交流。

联系我们

关于极限科技(INFINI Labs)

关于极限科技

极限科技,全称极限数据(北京)科技有限公司,是一家专注于实时搜索与数据分析的软件公司。旗下品牌极限实验室(INFINI Labs)致力于打造极致易用的数据探索与分析体验。

极限科技是一支年轻的团队,采用天然分布式的方式来进行远程协作,员工分布在全球各地,希望通过努力成为中国乃至全球企业大数据实时搜索分析产品的首选,为中国技术品牌输出添砖加瓦。

官网:https://www.infinilabs.com

收起阅读 »