Scroll查询实现的机制是什么
Elasticsearch • Charele 回复了问题 • 4 人关注 • 8 个回复 • 2066 次浏览 • 2023-08-09 11:49
社区日报 第1675期 (2023-08-01)
社区日报 • God_lockin 发表了文章 • 0 个评论 • 1081 次浏览 • 2023-08-01 13:05
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)
社区日报 • yuebancanghai 发表了文章 • 1 个评论 • 1072 次浏览 • 2023-07-31 20: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
都不取数据了,还要排序吗?
Elasticsearch • Ombres 回复了问题 • 2 人关注 • 1 个回复 • 1505 次浏览 • 2023-08-01 08:15
社区日报 第1673期 (2023-07-27)
社区日报 • Se7en 发表了文章 • 0 个评论 • 1290 次浏览 • 2023-07-27 15:48
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
ES7.9.3写入数据一段时间后提示Data is large
Elasticsearch • Charele 回复了问题 • 2 人关注 • 1 个回复 • 1511 次浏览 • 2023-09-19 02:19
有关于ES分片的主副问题
Elasticsearch • emmning 回复了问题 • 2 人关注 • 1 个回复 • 1433 次浏览 • 2023-07-27 11:14
社区日报 第1672期 (2023-07-26)
社区日报 • kin122 发表了文章 • 0 个评论 • 1082 次浏览 • 2023-07-26 10:07
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)
社区日报 • God_lockin 发表了文章 • 0 个评论 • 1187 次浏览 • 2023-07-25 09:21
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中搜索值为空的键值对
Elasticsearch • liaosy 发表了文章 • 0 个评论 • 3180 次浏览 • 2023-07-24 18:19
问题背景
今天早上,接到开发那边一个特殊的查询需求,在 Kibana 中搜索一个 json 类型日志中值为一个空大括号的键值对, 具体的日志示例如下:
aidl<br /> {<br /> "clientIp": "10.111.121.51",<br /> "query": "{}",<br /> "serviceUrl": "/aaa/bbb/cc",<br /> }<br />
也就是说针对这个类型的日志过滤出 query 值为空的请求 "query": "{}", 开发同学测试了直接在 kibana 中查询这个字符串 "query": "{}" 根本查不到我们想要的结果。
我们使用的是 ELK 8.3 的全家桶, 这个日志数据使用的默认 standard analyzer 的分词器。
初步分析
我们先对这个要查询的字符串进行下分词测试:
aidl<br /> GET /_analyze<br /> {<br /> "analyzer" : "standard",<br /> "text": "\"query\":\"{}\""<br /> }<br /> <br />
结果不出所料,我们想要空大括号在分词的时候直接就被干掉了,仅保留了 query 这一个 token:
aidl<br /> {<br /> "tokens": [{<br /> "token": "query",<br /> "start_offset": 1,<br /> "end_offset": 6,<br /> "type": "<ALPHANUM>",<br /> "position": 0<br /> }]<br /> }<br />
我们使用的 standard analyzer 在数据写入分词时直接抛弃掉{}等特殊字符,看来直接搜索 "query": "{}" 关键词这条路肯定是走不通。
换个思路
在网上搜索了一下解决的办法,有些搜索特殊字符的办法,但需要修改分词器,我们已经写入的日志数据量比较大,不太愿意因为这个搜索请求来修改分词器再 reindex。 但是我们的日志格式是固定的,serviceUrl 这个键值对总是在 query 后面的,那么我们可以结合前后文实现相同的
搜索效果:
aidl<br /> GET /_analyze<br /> {<br /> "analyzer" : "standard",<br /> "text": "\"query\":\"{}\",\"serviceUrl\""<br /> }<br /> <br />
可以看到这段被分为 2 个相邻的单词
aidl<br /> {<br /> "tokens": [{<br /> "token": "query",<br /> "start_offset": 1,<br /> "end_offset": 6,<br /> "type": "<ALPHANUM>",<br /> "position": 0<br /> },<br /> {<br /> "token": "serviceurl",<br /> "start_offset": 14,<br /> "end_offset": 24,<br /> "type": "<ALPHANUM>",<br /> "position": 1<br /> }<br /> ]<br /> }<br /> <br />
那么通过搜索 query 和 serviceUrl 为相邻的 2 个字是完全可以实现 query 的值为空的同样的查询效果。
为了确认在我们已经写入的数据中 query 和 serviceurl 也是相邻的,我们通过 ES termvectors API 确认了已经在 es 中的数据和我们这里测试的情况相同:
aidl<br /> GET /<index>/_termvectors/<_id>?fields=message<br /> <br /> "query" : {<br /> "term_freq" : 1,<br /> "tokens" : [<br /> {<br /> "position" : 198,<br /> "start_offset" : 2138,<br /> "end_offset" : 2143<br /> }<br /> ]<br /> },<br /> "serviceurl" : {<br /> "term_freq" : 1,<br /> "tokens" : [<br /> {<br /> "position" : 199,<br /> "start_offset" : 2151,<br /> "end_offset" : 2161<br /> }<br /> ]<br /> },<br />
这里我们可以看到 query 在 message 字段里面出现一次,其 end_offset 和 serviceurl 的 start_offset 之前也是相差 8, 和我们测试的结果相同。
这个时候我们就将原来的查询需求,转化为了对 "query serviceurl" 进行按顺序的精准查询就行了, 使用 match_phrase 可以达到我们的目的。
aidl<br /> GET /_search<br /> "query": {<br /> "match_phrase": {<br /> "message": {<br /> "query": "query serviceurl",<br /> "slop" : 0<br /> <br /> }<br /> }<br /> }<br />
这里顺便说一下,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/ ... 88058 按照这个 ngram 分词器的思路,我动手对我们的需求进行了下测试
首先先看看我们使用 ngram 分词器的分词效果, 我们这里简化了一下,去掉了原来的双引号,以避免过多 \
:
aidl<br /> GET _analyze<br /> {<br /> "tokenizer": "ngram",<br /> "text": "query:{}"<br /> }<br /> <br /> {<br /> "tokens" : [<br /> {<br /> "token" : "q",<br /> "start_offset" : 0,<br /> "end_offset" : 1,<br /> "type" : "word",<br /> "position" : 0<br /> },<br /> ...<br /> {<br /> "token" : "{",<br /> "start_offset" : 6,<br /> "end_offset" : 7,<br /> "type" : "word",<br /> "position" : 12<br /> },<br /> {<br /> "token" : "{}",<br /> "start_offset" : 6,<br /> "end_offset" : 8,<br /> "type" : "word",<br /> "position" : 13<br /> },<br /> {<br /> "token" : "}",<br /> "start_offset" : 7,<br /> "end_offset" : 8,<br /> "type" : "word",<br /> "position" : 14<br /> }<br /> ]<br /> }<br />
可以很明显的看到大括号被成功的分词了,果然是有戏。 直接定义一个 index 实战一下搜索效果
aidl<br /> PUT specialchar_debug<br /> {<br /> "settings": {<br /> "analysis": {<br /> "analyzer": {<br /> "specialchar_analyzer": {<br /> "tokenizer": "specialchar_tokenizer"<br /> }<br /> },<br /> "tokenizer": {<br /> "specialchar_tokenizer": {<br /> "type": "ngram",<br /> "min_gram": 1,<br /> "max_gram": 2<br /> }<br /> }<br /> }<br /> },<br /> "mappings": {<br /> "properties": {<br /> "text": {<br /> "analyzer": "specialchar_analyzer",<br /> "type": "text"<br /> }<br /> }<br /> }<br /> }<br />
插入几条测试数据:
aidl<br /> PUT specialchar_debug/_doc/1<br /> { "text": "query:{},serviceUrl"<br /> }<br /> <br /> PUT specialchar_debug/_doc/2<br /> { "text": "query:{aaa},serviceUrl"<br /> }<br /> <br /> PUT specialchar_debug/_doc/3<br /> { "text": "query:{bbb}, ccc, serviceUrl"<br /> }<br />
我们再测试一下搜索效果,
aidl<br /> GET specialchar_debug/_search<br /> {<br /> "query": {<br /> "match_phrase": {<br /> "text": "query:{}"<br /> }<br /> }<br /> }<br />
结果完全是我们想要的,看来这个方案可行
aidl<br /> "hits" : [<br /> {<br /> "_index" : "specialchar_debug",<br /> "_id" : "1",<br /> "_score" : 2.402917,<br /> "_source" : {<br /> "text" : "query:{},serviceUrl"<br /> }<br /> }<br /> ]<br />
小结
对于日志系统,我们一直在使用 ES 默认的 standard analyzer 的分词器, 基本上满足我们生产遇到的 99% 的需求,但面对特殊字符的这种搜索请求,确实比较无奈。这次遇到的空键值对的需求,我们通过搜索 2 个相邻的键绕过了问题。
如果一定要搜索这个字符串的话,我们也可以使用 ngram 分词器重新进行分词再进行处理, 条条大路通罗马。
作者介绍
卞弘智,研发工程师,10 多年的 SRE 经验,工作经历涵盖 DevOps,日志处理系统,监控和告警系统研发,WAF 和网关等系统基础架构领域,致力于通过优秀的开源软件推动自动化和智能化基础架构平台的演进。
这段ES英文如何正确的理解啊?
Elasticsearch • Charele 回复了问题 • 3 人关注 • 4 个回复 • 1467 次浏览 • 2023-07-31 17:11
社区日报 第1670期 (2023-07-24)
社区日报 • yuebancanghai 发表了文章 • 0 个评论 • 1120 次浏览 • 2023-07-24 13:30
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 支持邮件发送等功能
资讯动态 • liaosy 发表了文章 • 0 个评论 • 2464 次浏览 • 2023-07-21 17:28

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。
- INFINI Gateway: <https://github.com/infinilabs/gateway/issues>
- INFINI Console: <https://github.com/infinilabs/console/issues>
- 下载地址: <https://www.infinilabs.com/download>
或者通过 Discord 渠道加入聊天室:<https://discord.com/invite/tnZ8S5vQ>
欢迎大家微信扫码添加小助手(INFINI-Labs),加入用户群讨论,或者扫码加入我们的知识星球一起学习交流。

关于极限科技(INFINI Labs)

极限科技,全称极限数据(北京)科技有限公司,是一家专注于实时搜索与数据分析的软件公司。旗下品牌极限实验室(INFINI Labs)致力于打造极致易用的数据探索与分析体验。
极限科技是一支年轻的团队,采用天然分布式的方式来进行远程协作,员工分布在全球各地,希望通过努力成为中国乃至全球企业大数据实时搜索分析产品的首选,为中国技术品牌输出添砖加瓦。
官网:<https://www.infinilabs.com>
社区日报 第1669期 (2023-07-21)
社区日报 • laoyang360 发表了文章 • 0 个评论 • 1193 次浏览 • 2023-07-21 13:20
1、Spring 和 Elasticsearch:将搜索功能构建到您的应用程序中
https://medium.com/%40Alexande ... 8450b
2、使用 PostgreSQL 的全文搜索引擎(第 2 部分):Postgres 与 Elasticsearch
https://xata.io/blog/postgres- ... earch
3、资产管理平台 (AMP) 中的 Elasticsearch 索引策略
https://netflixtechblog.com/el ... 1e541
编辑:铭毅天下
归档:https://ela.st/cn-daily-all
订阅:https://ela.st/cn-daily-sub
沙龙:https://ela.st/cn-meetup
B站: https://ela.st/bilibili
使用script类型的pipeline时报错
Elasticsearch • I_Like 回复了问题 • 2 人关注 • 2 个回复 • 1285 次浏览 • 2023-07-21 22:07