ELK,萌萌哒

【搜索客社区日报】第2033期 (2025-05-08)

社区日报Se7en 发表了文章 • 0 个评论 • 1097 次浏览 • 6 天前 • 来自相关话题

1.vGPU 是伪命题?NVIDIA 官方为什么不自己出细粒度共享呢?
https://mp.weixin.qq.com/s/f53_CecLm_0oAihf5qHVew
2.vLLM + LWS:Kubernetes 上的多机多卡推理方案
https://mp.weixin.qq.com/s/RTSx9LqNuLZ_GPsrgbWDBw
3.MCP 最新版本 9 大差异解读:授权机制、传输协议、批处理、工具元数据...
https://mp.weixin.qq.com/s/xiZd0gHmLr3mNqHvU3Ca1w
4.训练100B模型要多少显存?
https://mp.weixin.qq.com/s/tdPrtsxOfnpyQzE25psdUQ

编辑:Se7en
更多资讯:http://news.searchkit.cn

【搜索客社区日报】第2036期 (2025-05-13)

社区日报God_lockin 发表了文章 • 0 个评论 • 125 次浏览 • 15 小时前 • 来自相关话题

1. 最好的语言 + 最好的搜索引擎 = ?(需要梯子)
https://medium.com/%40muriloli ... c7d9a

2. 想不想给ES自动升版本?(需要梯子)
https://medium.com/%40akhil.ch ... 204ea

3. 拿那个logstash把日志搞进来!(需要梯子)
https://levelup.gitconnected.c ... 86783

编辑:斯蒂文
更多资讯:http://news.searchkit.cn

谈谈 ES 6.8 到 7.10 的功能变迁(6)- 其他

ElasticsearchINFINI Labs 小助手 发表了文章 • 0 个评论 • 222 次浏览 • 1 天前 • 来自相关话题

![](https://infinilabs.cn/img/blog ... er.png)

这是 ES 7.10 相较于 ES 6.8 新增内容的最后一篇,主要涉及算分方法和同义词加载的部分。

自定义算分:script_score 2.0


Elasticsearch 7.0 引入了新一代的函数分数功能,称为 script_score 查询。这一新功能提供了一种更简单、更灵活的方式来为每条记录生成排名分数。script_score 查询由一组函数构成,包括算术函数和距离函数,用户可以根据需要混合和匹配这些函数,以构建任意的分数计算逻辑。这种模块化的结构使得使用更加简便,同时也为更多用户提供了这一重要功能的访问权限。通过 script_score,用户可以根据复杂的业务逻辑自定义评分,而不仅仅依赖于传统的 TF-IDF 或 BM25 算法。例如,可以根据文档的地理位置、时间戳、或其他自定义字段的值来调整评分,从而更精确地控制搜索结果的排序。

script_score 是 ES 对 function score 功能的一个迭代替换。

常用函数


基本函数


用于对字段值或评分进行基本的数学运算。
doc[<field>].value 获取文档中某个字段的值。

<br /> "script": {<br /> "source": "doc['price'].value * 1.2"<br /> }<br />

算术运算


支持加 (+)、减 (-)、乘 (*)、除 (/)、取模 (%) 等操作。

<br /> "script": {<br /> "source": "doc['price'].value + (doc['discount'].value * 0.5)"<br /> }<br />

Saturation 函数


saturation 函数用于对字段值进行饱和处理,限制字段值对评分的影响范围。

<br /> "script": {<br /> "source": "saturation(doc['<field_name>'].value, <pivot>)"<br /> }<br />

  • <field_name>: 需要处理的字段。
  • <pivot>: 饱和点(pivot),当字段值达到该值时,评分增益趋于饱和。

    <br /> //在这个示例中,`likes` 字段的值在达到 `100` 后,对评分的影响会趋于饱和。<br /> {<br /> "query": {<br /> "script_score": {<br /> "query": {<br /> "match_all": {}<br /> },<br /> "script": {<br /> "source": "saturation(doc['likes'].value, 100)"<br /> }<br /> }<br /> }<br /> }<br />

    Sigmoid 函数


    sigmoid 函数用于对字段值进行 S 形曲线变换,平滑地调整字段值对评分的影响。

    <br /> "script": {<br /> "source": "sigmoid(doc['<field_name>'].value, <pivot>, <exponent>)"<br /> }<br />

  • 需要处理的字段。
  • 中心点(pivot),S 形曲线的中点。
  • 指数,控制曲线的陡峭程度。

    ```
    //在这个示例中,`likes` 字段的值在 `50` 附近对评分的影响最为显著,而随着值远离 `50`,影响会逐渐平滑。
    {
    "query": {
    "script_score": {
    "query": {
    "match_all": {}
    },
    "script": {
    "source": "sigmoid(doc['likes'].value, 50, 0.5)"
    }
    }
    }
    }
    ```

    #### 距离衰减函数

    用于衰减计算地理位置的函数。

    ```
    //相关函数
    double decayGeoLinear(String originStr, String scaleStr, String offsetStr, double decay, GeoPoint docValue)
    double decayGeoExp(String originStr, String scaleStr, String offsetStr, double decay, GeoPoint docValue)
    double decayGeoGauss(String originStr, String scaleStr, String offsetStr, double decay, GeoPoint docValue)


    "script" : {
    "source" : "decayGeoExp(params.origin, params.scale, params.offset, params.decay, doc['location'].value)",
    "params": {
    "origin": "40, -70.12",
    "scale": "200km",
    "offset": "0km",
    "decay" : 0.2
    }
    }
    ```

    #### 数值衰减函数

    用于衰减计算数值的函数。

    ```
    //相关函数
    double decayNumericLinear(double origin, double scale, double offset, double decay, double docValue)
    double decayNumericExp(double origin, double scale, double offset, double decay, double docValue)
    double decayNumericGauss(double origin, double scale, double offset, double decay, double docValue)

    "script" : {
    "source" : "decayNumericLinear(params.origin, params.scale, params.offset, params.decay, doc['dval'].value)",
    "params": {
    "origin": 20,
    "scale": 10,
    "decay" : 0.5,
    "offset" : 0
    }
    }
    ```

    #### 日期衰减函数

    用于衰减计算日期的函数。

    ```
    //相关函数
    double decayDateLinear(String originStr, String scaleStr, String offsetStr, double decay, JodaCompatibleZonedDateTime docValueDate)
    double decayDateExp(String originStr, String scaleStr, String offsetStr, double decay, JodaCompatibleZonedDateTime docValueDate)
    double decayDateGauss(String originStr, String scaleStr, String offsetStr, double decay, JodaCompatibleZonedDateTime docValueDate)

    "script" : {
    "source" : "decayDateGauss(params.origin, params.scale, params.offset, params.decay, doc['date'].value)",
    "params": {
    "origin": "2008-01-01T01:00:00Z",
    "scale": "1h",
    "offset" : "0",
    "decay" : 0.5
    }
    }
    ```

    #### 随机函数

    用于生成随机评分。
    _randomNotReproducible`_ 生成一个随机评分。

    ```
    "script" : {
    "source" : "randomNotReproducible()"
    }
    ```

    _randomReproducible_ 使用种子值生成可重复的随机评分。

    ```
    "script" : {
    "source" : "randomReproducible(Long.toString(doc['_seq_no'].value), 100)"
    }
    ```

    #### 字段值因子

    用于根据字段值调整评分。
    _field_value_factor`_ 根据字段值调整评分。

    ```
    "script" : {
    "source" : "Math.log10(doc['field'].value * params.factor)",
    params" : {
    "factor" : 5
    }
    }
    ```

    #### 其他实用函数

  • Math.log:计算对数,Math.log(doc['price'].value)
  • Math.sqrt:计算平方根,Math.sqrt(doc['popularity'].value)
  • Math.pow:计算幂次,Math.pow(doc['score'].value, 2)

    同义词字段重加载


    Elasticsearch 7.3 引入了同义词字段重加载功能,允许用户在更新同义词文件后,无需重新索引即可使更改生效。
    这一功能极大地简化了同义词管理的流程,尤其是在需要频繁更新同义词的场景下。通过 _reload_search_analyzers API,用户可以重新加载指定索引的分词器,从而使新的同义词规则立即生效。
    注意,虽然同义词词典能被热加载,但是已经生成的索引数据不会被修改。

    测试代码

    <br /> PUT /my_index<br /> {<br /> "settings": {<br /> "index" : {<br /> "analysis" : {<br /> "analyzer" : {<br /> "my_synonyms" : {<br /> "tokenizer" : "whitespace",<br /> "filter" : ["synonym"]<br /> }<br /> },<br /> "filter" : {<br /> "synonym" : {<br /> "type" : "synonym_graph",<br /> "synonyms_path" : "analysis/synonym.txt",<br /> "updateable" : true<br /> }<br /> }<br /> }<br /> }<br /> },<br /> "mappings": {<br /> "properties": {<br /> "text": {<br /> "type": "text",<br /> "analyzer" : "standard",<br /> "search_analyzer": "my_synonyms"<br /> }<br /> }<br /> }<br /> }<br /> <br /> POST /my_index/_reload_search_analyzers<br />

    执行上述请求后,Elasticsearch 会重新加载 my_index 索引的分析器,使最新的同义词规则生效。

    case insensitive 参数


    case_insensitive 参数允许用户在执行精确匹配查询时忽略大小写。
    这一功能特别适用于需要处理大小写不敏感数据的场景,例如用户名、标签或分类代码等。通过设置 case_insensitivetrue,用户可以在不修改数据的情况下,实现对大小写不敏感的查询,从而简化查询逻辑并提高搜索的准确性。

    测试代码

    <br /> //在这个示例中,`term` 查询会匹配 `user` 字段值为 `JohnDoe`、`johndoe` 或 `JOHNDOE` 的文档,而忽略大小写差异。<br /> {<br /> "query": {<br /> "term": {<br /> "user": {<br /> "value": "JohnDoe",<br /> "case_insensitive": true<br /> }<br /> }<br /> }<br /> }<br />

    小结


    Elasticsearch 作为一款强大的开源搜索和分析引擎,其版本的不断迭代带来了诸多显著的改进与优化。对比 Elasticsearch 6.8,Elasticsearch 7.10 在多个方面展现出了新的功能和特性,极大地提升了用户体验和系统性能。这系列文章简短的介绍了各个方面的新功能和优化,希望能给大家一定的帮助。

    推荐阅读


  • [谈谈 ES 6.8 到 7.10 的功能变迁(1)- 性能优化篇](https://infinilabs.cn/blog/202 ... part-1)
  • [谈谈 ES 6.8 到 7.10 的功能变迁(2)- 字段类型篇](https://infinilabs.cn/blog/202 ... part-2)
  • [谈谈 ES 6.8 到 7.10 的功能变迁(3)- 查询方法篇](https://infinilabs.cn/blog/202 ... part-3)
  • [谈谈 ES 6.8 到 7.10 的功能变迁(4)- 聚合功能篇](https://infinilabs.cn/blog/202 ... part-4)
  • [谈谈 ES 6.8 到 7.10 的功能变迁(5)- 任务和集群管理](https://infinilabs.cn/blog/202 ... part-5)

    关于极限科技(INFINI Labs)


    ![INFINI Labs](https://infinilabs.cn/img/blog ... bs.png)

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

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

    官网:<https://infinilabs.cn>;

    作者:金多安,极限科技(INFINI Labs)搜索运维专家,Elastic 认证专家,搜索客社区日报责任编辑。一直从事与搜索运维相关的工作,日常会去挖掘 ES / Lucene 方向的搜索技术原理,保持搜索相关技术发展的关注。
    原文:https://infinilabs.cn/blog/202 ... rt-6/

谈谈 ES 6.8 到 7.10 的功能变迁(5)- 任务和集群管理

ElasticsearchINFINI Labs 小助手 发表了文章 • 0 个评论 • 222 次浏览 • 1 天前 • 来自相关话题

![](https://infinilabs.cn/img/blog ... ks.png)

这一篇我们继续了解 ES 7.10 相较于 ES 6.8 调优的集群管理和任务管理的方法,主要有断联查询的主动取消、投票节点角色、异步查询和可搜索快照四个功能。

Query 自动取消


对于一个完善的产品来说,当一个任务发起链接主动断联的时候,服务端与之相关的任务应该也都被回收。但是这个特性到了 elasticsearch 7.4 版本才有了明确的声明。

Elasticsearch now automatically terminates queries sent through the _search endpoint when the initiating connection is closed.

相关的 PR 和 issue 在这里,对源码有兴趣的同学可以挖掘一下。

PR:https://github.com/elastic/ela ... 43332
issue:https://github.com/elastic/ela ... 43105

简单来说,ES 接受在某个查询的 http 链接断掉的时候,与其相关的父子任务的自动取消。原来的场景下可能需要手工一个个关闭。

实际测试


利用 painless 模拟复杂查询,下面这个查询在测试集群上能维持 5s 左右

<br /> GET /_search?max_concurrent_shard_requests=1<br /> {<br /> "query": {<br /> "bool": {<br /> "must": [<br /> {<br /> "script": {<br /> "script": {<br /> "lang": "painless",<br /> "source": """<br /> long sum = 0;<br /> for (int i = 0; i < 100000; i++) {<br /> sum += i;<br /> }<br /> return true;<br /> """<br /> }<br /> }<br /> },<br /> {<br /> "script": {<br /> "script": {<br /> "lang": "painless",<br /> "source": """<br /> long product = 1;<br /> for (int i = 1; i < 100000; i++) {<br /> product *= i;<br /> }<br /> return true;<br /> """<br /> }<br /> }<br /> },<br /> {<br /> "script": {<br /> "script": {<br /> "lang": "painless",<br /> "source": """<br /> long factorial = 1;<br /> for (int i = 1; i < 100000; i++) {<br /> factorial *= i;<br /> }<br /> long squareSum = 0;<br /> for (int j = 0; j < 100000; j++) {<br /> squareSum += j * j;<br /> }<br /> return true;<br /> """<br /> }<br /> }<br /> },<br /> {<br /> "script": {<br /> "script": {<br /> "lang": "painless",<br /> "source": """<br /> long fib1 = 0;<br /> long fib2 = 1;<br /> long next;<br /> for (int i = 0; i < 100000; i++) {<br /> next = fib1 + fib2;<br /> fib1 = fib2;<br /> fib2 = next;<br /> }<br /> return true;<br /> """<br /> }<br /> }<br /> }<br /> ]<br /> }<br /> }<br /> }<br />

查看任务被终止的状态

<br /> GET /_tasks?detailed=true&actions=*search*<br />

测试脚本,判断上面该查询被取消后是否还可以查到任务

```python
import requests
import multiprocessing
import time
from requests.exceptions import RequestException
from datetime import datetime

Elasticsearch 地址

ES_URL = "<a href="http://localhost:9210"" rel="nofollow" target="_blank">http://localhost:9210" # 6.8版本地址

ES_URL = "<a href="http://localhost:9201"" rel="nofollow" target="_blank">http://localhost:9201"

耗时查询的 DSL

LONG_RUNNING_QUERY = {"size":0,
"query": {
"bool": {
"must": [
{
"script": {
"script": {
"lang": "painless",
"source": """
long sum = 0;
for (int i = 0; i < 100000; i++) {
sum += i;
}
return true;
"""
}
}
},
{
"script": {
"script": {
"lang": "painless",
"source": """
long product = 1;
for (int i = 1; i < 100000; i++) {
product = i;
}
return true;
"""
}
}
},
{
"script": {
"script": {
"lang": "painless",
"source": """
long factorial = 1;
for (int i = 1; i < 100000; i++) {
factorial
= i;
}
long squareSum = 0;
for (int j = 0; j < 100000; j++) {
squareSum += j * j;
}
return true;
"""
}
}
},
{
"script": {
"script": {
"lang": "painless",
"source": """
long fib1 = 0;
long fib2 = 1;
long next;
for (int i = 0; i < 100000; i++) {
next = fib1 + fib2;
fib1 = fib2;
fib2 = next;
}
return true;
"""
}
}
}
]
}
}
}

用于同步的事件对象

query_finished = multiprocessing.Event()

新增:进程终止标志位

process_terminated = multiprocessing.Event()

定义一个函数用于添加时间戳到日志

def log_with_timestamp(message,*message1):
timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
print(f"[{timestamp}] {message}+{message1}")

发起查询的函数

def run_query():
try:
log_with_timestamp("发起查询...")
session = requests.Session()
response = session.post(
f"{ES_URL}/_search",
json=LONG_RUNNING_QUERY,
stream=True # 启用流式请求,允许后续中断
)
try:

尝试读取响应内容(如果连接未被中断)

if response.status_code == 200:
log_with_timestamp("查询完成,结果:", response.json())
else:
log_with_timestamp("查询失败,错误信息:", response.text)
except RequestException as e:
log_with_timestamp("请求被中断:", e)
finally:

标记查询完成

query_finished.set()


中断连接的信号函数

def interrupt_signal():
time.sleep(1) # 等待 1 秒
log_with_timestamp("发出中断查询信号...")

标记可以中断查询了

query_finished.set()


检测任务是否存在的函数

def check_task_exists():

等待进程终止标志位

process_terminated.wait()
max_retries = 3
retries = 0
time.sleep(1) #1s后检查
while retries < max_retries:
log_with_timestamp("检查任务是否存在...")
tasks_url = f"{ES_URL}/_tasks?detailed=true&actions=search"
try:
tasks_response = requests.get(tasks_url)
if tasks_response.status_code == 200:
tasks = tasks_response.json().get("nodes")
if tasks:
log_with_timestamp("任务仍存在:", tasks)
else:
log_with_timestamp("任务已消失")
break
else:
log_with_timestamp("获取任务列表失败,错误信息:", tasks_response.text)
except RequestException as e:
log_with_timestamp(f"检测任务失败(第 {retries + 1} 次重试): {e}")
retries += 1
time.sleep(1) # 等待 1 秒后重试
if retries == max_retries:
log_with_timestamp("达到最大重试次数,无法检测任务状态。")


主函数

def main():

启动查询进程

query_process = multiprocessing.Process(target=run_query)
query_process.start()

启动中断信号进程

interrupt_process = multiprocessing.Process(target=interrupt_signal)
interrupt_process.start()

等待中断信号

query_finished.wait()

检查查询进程是否还存活并终止它

if query_process.is_alive():
log_with_timestamp("尝试中断查询进程...")
query_process.terminate()
log_with_timestamp("查询进程已终止")

新增:设置进程终止标志位

process_terminated.set()

启动任务检测进程

check_process = multiprocessing.Process(target=check_task_exists)
check_process.start()

等待所有进程完成

query_process.join()
interrupt_process.join()
check_process.join()


if name == "main":
main()
<br /> <br /> 实际测试结果:<br /> <br /> shell

6.8 版本

[2025-02-08 15:17:21] 发起查询...+()
[2025-02-08 15:17:22] 发出中断查询信号...+()
[2025-02-08 15:17:22] 尝试中断查询进程...+()
[2025-02-08 15:17:22] 查询进程已终止+()
[2025-02-08 15:17:23] 检查任务是否存在...+()
[2025-02-08 15:17:23] 任务仍存在:+({'fYMNv_KxQGCGzhgfMxPXuA': {......}},)
<br /> <br /> 可以看到在查询任务被终止后 1s 再去检查,任务仍然存在<br /> <br /> shell

7.10 版本

[2025-02-08 15:18:16] 发起查询...+()
[2025-02-08 15:18:17] 发出中断查询信号...+()
[2025-02-08 15:18:17] 尝试中断查询进程...+()
[2025-02-08 15:18:17] 查询进程已终止+()
[2025-02-08 15:18:18] 检查任务是否存在...+()
[2025-02-08 15:18:18] 任务已消失+()
```

这里可以看到任务已经检测不到了。

关于 timeout 配置


这里展开讨论下,timeout 配置。超时回收处理是一个‘best effort’行为。

(Optional, time units) Specifies the period of time to wait for a response. If no response is received before the timeout expires, the request fails and returns an error. Defaults to no timeout.

the search request is more of a best effort and does not guarantee that the request will never last longer than the specified amount of time.

异步搜索


使用方法


可以让用户进行异步的搜索,可以通过相关参数进行检查维护该搜索的状态和结果。比较合适查询量较大但对延迟要求较低的查询,进行精细化的管理控制。

注意:这里的参数基本都是添加到 url 上的,并不是添加到 request body 上的。

<br /> POST test_index/_async_search?keep_on_completion=true<br /> {<br /> "query": {<br /> "match_all": {}<br /> }<br /> }<br />

注:这里为了产生查询结果 id 使用了 keep_on_completion 参数,这个参数的使用见下面解释。

返回结果,和一般的查询结果不同的是,添加了结果 id 和查询的一些状态数据。

json<br /> {<br /> "id": "Fmk2b0VjM2FEVE9Dbk9TemVyOTlkMncbOFlwRGU2OWZTa2kxNEpoT0Q2bVZrZzozODIz",//结果id,可以用于后续的复查<br /> "is_partial": false,//是否为部分完成结果<br /> "is_running": false,//是否还在查询<br /> "start_time_in_millis": 1738978637287,//查询产生时间戳<br /> "expiration_time_in_millis": 1739410637287,//查询结果过期时间戳<br /> "response": {<br /> "took": 1,<br /> "timed_out": false,<br /> "_shards": {<br /> "total": 1,<br /> "successful": 1,<br /> "skipped": 0,<br /> "failed": 0<br /> },<br /> "hits": {<br /> "total": {<br /> "value": 3,<br /> "relation": "eq"<br /> },<br /> "max_score": 1,<br /> "hits": [······]<br /> }<br /> }<br /> }<br />

管理查询结果

<br /> //查询结果和第一次返回的内容一致<br /> GET /_async_search/Fmk2b0VjM2FEVE9Dbk9TemVyOTlkMncbOFlwRGU2OWZTa2kxNEpoT0Q2bVZrZzozODIz<br /> <br /> //主动删除查询结果<br /> DELETE /_async_search/Fmk2b0VjM2FEVE9Dbk9TemVyOTlkMncbOFlwRGU2OWZTa2kxNEpoT0Q2bVZrZzozODIz<br /> <br />

关键参数


  • wait_for_completion_timeout:参数(默认为 1 秒),这个参数用来设置异步查询的等待时间。当异步搜索在此时间内完成时,响应将不包括 ID,结果也不会存储在集群中
  • keep_on_completion:参数(默认为 false)可以设置为 true,可以强制存储查询结果,即便在 wait_for_completion_timeout 设置时间内完成搜索,该结果也能被查询到。
  • keep_alive:指定异步搜索结果可以被保存多长时间,默认为 5d(5 天)。在此期间之后,正在进行的异步搜索和任何保存的搜索结果将被删除。
  • batched_reduce_size:是 Elasticsearch 中的一个配置参数,默认值为 5。它的作用是控制分片结果的部分归并频率,具体来说,它决定了协调节点(coordinating node)在接收到多少个分片的响应后,会执行一次部分结果归并(partial reduction)。
  • pre_filter_shard_size:是 Elasticsearch 中与查询执行相关的一个参数,它的默认值为 1,并且不可更改。这个参数的作用是强制 Elasticsearch 在执行查询之前,先进行一轮预过滤(pre-filter),以确定哪些分片(shard)可能包含与查询匹配的文档,从而跳过那些肯定不包含匹配文档的分片。

    查询结果存储位置


    异步查询的结果部分存储在.async-search中,但是进行了程序加密,内容对使用者不可见。

    <br /> GET .async-search/_search<br /> // 返回的结果<br /> ···<br /> "hits": [<br /> {<br /> "_index": ".async-search",<br /> "_type": "_doc",<br /> "_id": "bPNotcTCTV-gSIiZLuK0IA",<br /> "_score": 1,<br /> "_source": {<br /> "result": "i6+xAwFERm1KUVRtOTBZMVJEVkZZdFoxTkphVnBNZFVzd1NVRWJPRmx3UkdVMk9XWlRhMmt4TkVwb1QwUTJiVlpyWnpvek1EWTEAAQEDAD+AAAADP4AAAAAAABR0Sm9yNDVRQlQ3bzBsZTdsYmp0TgAAAARfZG9jAP//////////AwALeyJhIjoxMTExfQoAAAAAAAAAAQEAAAAWOFlwRGU2OWZTa2kxNEpoT0Q2bVZrZwp0ZXN0X2luZGV4Fk5fYmphNXM1UWtpcnU4RXdleVlGSUEAAAA/gAAAAAAAFHRab3I0NVFCVDdvMGxlN2xlVHNrAAAABF9kb2MA//////////8DAAt7ImEiOjExMTJ9CgAAAAAAAAABAQAAABY4WXBEZTY5ZlNraTE0SmhPRDZtVmtnCnRlc3RfaW5kZXgWTl9iamE1czVRa2lydThFd2V5WUZJQQAAAD+AAAAAAAAUdHBvcjQ1UUJUN28wbGU3bGZqc28AAAAEX2RvYwD//////////wMAC3siYSI6MTExM30KAAAAAAAAAAEBAAAAFjhZcERlNjlmU2tpMTRKaE9ENm1Wa2cKdGVzdF9pbmRleBZOX2JqYTVzNVFraXJ1OEV3ZXlZRklBAAAAAAAAAAAAAgABAQEAAAAAAAsAAAAAAAABlOMuvCQAAAGU/O6IJA==",<br /> "headers": {},<br /> "expiration_time": 1739410278436,<br /> "response_headers": {}<br /> }<br /> },<br /> ···<br />

    只投票候选节点


    这是一个主候选节点角色的优化,能相对固定 master 节点的位置,减少了选举候选节点过多的问题。

    作用


    Voting - only master - eligible node(仅参与投票的具备主节点资格的节点)在 Elasticsearch 集群中有以下作用:

    1. 参与主节点选举:该节点参与主节点选举过程,但本身不会成为集群选出的主节点,主要作为选举中的决胜因素(打破平局)。
    2. 保障高可用性:在高可用性(HA)集群中,至少需要三个具备主节点资格的节点,其中至少两个不能是仅参与投票的节点,这样即使有一个节点故障,集群仍能选出主节点。
    3. 分担选举及状态发布任务:和普通具备主节点资格的节点一样,在集群状态发布期间承担特定任务。
    4. 灵活承担其他角色:可以同时承担集群中的其他角色,如数据节点;也可以作为专用节点,不承担其他角色。

      配置


      三个节点的集群:可以配置两个普通主节点资格节点和一个仅参与投票的节点。这样在一个普通主节点故障时,剩下的普通主节点和仅参与投票的节点一起可以完成主节点选举,保证集群的正常运行。
      理论上,主候选节点数量能满足不同区域间的主备切换要求即可,其余可以都是投票节点。

      可搜索快照


      注意:这是一个收费功能

      实现机制


      可搜索快照让你能够通过使用快照来保障数据恢复能力,而非在集群内维护副本分片,从而降低运营成本。

      当你将快照中的索引挂载为可搜索快照时,Elasticsearch 会将索引分片复制到集群内的本地存储中。这能确保搜索性能与搜索其他任何索引相当,并尽量减少对访问快照存储库的需求。如果某个节点发生故障,可搜索快照索引的分片会自动从快照存储库中恢复。

      搜索可搜索快照索引与搜索其他任何索引的方式相同。搜索性能与常规索引相当,因为在挂载可搜索快照时,分片数据会被复制到集群中的节点上

      如果某个节点发生故障,且需要从快照中恢复可搜索快照分片,在 Elasticsearch 将分片分配到其他节点的短暂时间内,集群健康状态将不会显示为绿色。在这些分片重新分配完成之前,对这些分片的搜索将会失败或返回部分结果。

      对于搜索频率较低的数据,这能显著节省成本。使用可搜索快照,不再需要额外的索引分片副本以避免数据丢失,这有可能将搜索该数据所需的节点本地存储容量减少一半。同时可搜索快照依赖于备份使用的快照,也不需要额外的空间。

      使用建议


    5. 从含多索引的快照挂载单个索引时,建议进行使用分隔,创建仅含目标索引的快照副本并挂载,方便独立管理备份与可搜索快照生命周期。

    6. 挂载为可搜索快照索引前,建议将索引强制合并为每分片一个段,减少从存储库读取数据的操作和成本。

      实际测试


      基础配置


      前提条件:需要一个镜像使用存储,这里使用 minIO 作为测试

    7. 安装 S3 插件,并注册快照库信息

      ```

      在线安装插件


      elasticsearch-plugin install repository-s3

      设置访问minio的信息,elasticsearch的bin目录下,使用minIO中设置的用户名密码


      ./elasticsearch-keystore add s3.client.default.access_key
      ./elasticsearch-keystore add s3.client.default.secret_key

      重载安全设置,然后重启节点

      POST _nodes/reload_secure_settings


      注册快照库

      PUT _snapshot/my-minio-repository
      {
      "type": "s3",
      "settings": {
      "bucket": "es-bucket",
      "endpoint": "<a href="http://127.0.0.1:9002"" rel="nofollow" target="_blank">http://127.0.0.1:9002",
      "compress": true
      }
      }
      ```

    8. 挂载需要的快照索引

      <br /> POST /_snapshot/my-minio-repository/snapshot_es_prp_cmain_20240829/_mount?wait_for_completion=true<br /> {<br /> "index": "es_prp_cmain_insured_itemkind_detail_formal_20240829",<br /> "renamed_index": "test_searchable_snapshot",//挂载时对索引进行重命名<br /> "index_settings": {<br /> "index.number_of_replicas": 0<br /> },<br /> "ignore_index_settings": [ "index.refresh_interval" ]<br /> }<br />

    9. 检查空间占用

      <br /> GET _cat/indices/test_searchable_snapshot?v<br /> health status index uuid pri rep docs.count docs.deleted store.size pri.store.size<br /> green open test_searchable_snapshot qROj2flcRdiGOZaejeAmQQ 1 0 10000 0 21.3mb 21.3mb<br />

      在系统上也看到了对应 uuid 的文件目录

      <br /> [root@hcss-ecs 0]# ls<br /> _state snapshot_cache translog<br /> [root@hcss-ecs 0]# pwd<br /> /data/elasticsearch-7.10.2/data/nodes/0/indices/qROj2flcRdiGOZaejeAmQQ/0<br />

      小结


      这篇的内容讲解测试的相对较细,对于查询的自动取消和异步查询增加了 ES 查询任务的灵活性;只投票节点也是加强了主节点选举的稳定性;可搜索快照是成本和功能的均衡方法,对于日志场景的使用是一个不错的选择。

      推荐阅读


  • [谈谈 ES 6.8 到 7.10 的功能变迁(1)- 性能优化篇](https://infinilabs.cn/blog/202 ... part-1)
  • [谈谈 ES 6.8 到 7.10 的功能变迁(2)- 字段类型篇](https://infinilabs.cn/blog/202 ... part-2)
  • [谈谈 ES 6.8 到 7.10 的功能变迁(3)- 查询方法篇](https://infinilabs.cn/blog/202 ... part-3)
  • [谈谈 ES 6.8 到 7.10 的功能变迁(4)- 聚合功能篇](https://infinilabs.cn/blog/202 ... part-4)
  • [谈谈 ES 6.8 到 7.10 的功能变迁(6)- 其他](https://infinilabs.cn/blog/202 ... part-6)

    关于极限科技(INFINI Labs)


    ![INFINI Labs](https://infinilabs.cn/img/blog ... bs.png)

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

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

    官网:<https://infinilabs.cn>;

    作者:金多安,极限科技(INFINI Labs)搜索运维专家,Elastic 认证专家,搜索客社区日报责任编辑。一直从事与搜索运维相关的工作,日常会去挖掘 ES / Lucene 方向的搜索技术原理,保持搜索相关技术发展的关注。
    原文:https://infinilabs.cn/blog/202 ... rt-5/

【搜索客社区日报】第2035期 (2025-05-12)

社区日报Muses 发表了文章 • 0 个评论 • 432 次浏览 • 2 天前 • 来自相关话题

活动推荐🔥:【5月15日 北京】本次 Workshop 活动将围绕 “搜索服务统一治理” “流量管控” “服务编排” 三大核心板块展开,深入探讨如何通过 INFINI Labs 产品为企业提供高效、灵活的搜索基础设施管理方案。欢迎大家免费报名参加。
https://hdxu.cn/128g7

1、Elasticsearch中的三种分页策略深度解析:原理、使用及对比
https://blog.csdn.net/qq_26664 ... 98228

2、Easysearch 基础运维扫盲指南:从 HTTP 到 HTTPS、认证与安全访问全解析
https://mp.weixin.qq.com/s/HR7E7HAfS4ntpSkD_r5_Zw

3、MySQL数据实时接入Easysearch,零代码迁移全流程
https://mp.weixin.qq.com/s/bVGf8v6RAQljficJrjEISw

4、字节跳动开源了一款 Deep Research 项目
https://mp.weixin.qq.com/s/ejE6bfR_lFQutPy-u_pzmQ

5、最强中文TTS接入MCP-Server,效果再次封神!
https://mp.weixin.qq.com/s/ivjDIwYXIqxyV3kOvJ2VhQ

编辑:Muse
更多资讯:http://news.searchkit.cn

INFINI Console 纳管 Elasticsearch 9(二):日志监控

ElasticsearchINFINI Labs 小助手 发表了文章 • 0 个评论 • 520 次浏览 • 3 天前 • 来自相关话题

前面介绍过 INFINI Console 纳管 Elasticsearch 9(一),进行指标监控、数据管理、DSL 语句执行,但日志监控功能需要结合 [Agent](https://docs.infinilabs.com/agent/main/zh/) 才能使用。现在来实现一下:

Agent 需要和 ES 部署到同一机器上,这里是在我本地电脑上进行安装。

安装 Elastisearch


bash<br /> curl -O <a href="https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-9.0.0-darwin-x86_64.tar.gz" rel="nofollow" target="_blank">https://artifacts.elastic.co/d ... ar.gz</a><br /> curl <a href="https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-9.0.0-darwin-x86_64.tar.gz.sha512" rel="nofollow" target="_blank">https://artifacts.elastic.co/d ... ha512</a> | shasum -a 512 -c -<br /> tar -xzf elasticsearch-9.0.0-darwin-x86_64.tar.gz<br /> cd elasticsearch-9.0.0/<br /> ./bin/elasticsearch<br />

![](https://infinilabs.cn/img/blog ... 01.png)

将 ES 注册到 Console 中。

![](https://infinilabs.cn/img/blog ... 02.png)

![](https://infinilabs.cn/img/blog ... 03.png)

安装 Agent


bash<br /> curl -O <a href="https://release.infinilabs.com/agent/stable/agent-1.29.2-2008-mac-amd64.zip" rel="nofollow" target="_blank">https://release.infinilabs.com ... 4.zip</a><br /> mkdir agent<br /> unzip agent-1.29.2-2008-mac-amd64.zip -d agent/<br /> cd agent<br />

修改配置文件 agent.yml,填写正确的 Console 地址。

![](https://infinilabs.cn/img/blog ... 04.png)

启动 Agent,成功注册到 Console,获取到相关配置,但连接 Console 系统集群出现异常,这是因为 Console 系统集群是 Docker 部署的(172.17.0.2 是 Docker 内部 IP)。

![](https://infinilabs.cn/img/blog ... 05.png)

通过 Console 修改 Agent 配置。

![](https://infinilabs.cn/img/blog ... 06.png)

![](https://infinilabs.cn/img/blog ... 07.png)

注:Console 系统集群地址需调整为 Agent 可以访问的地址;配置版本号需要增大。

Agent 运行无异常。

![](https://infinilabs.cn/img/blog ... 08.png)

Agent 注册 Console 成功后,在 Console 页面“资源管理”-“探针管理”中可以看到注册的 Agent 实例。

![](https://infinilabs.cn/img/blog ... 09.png)

关联操作


Agent 关联到需要采集数据的 ES 集群。

![](https://infinilabs.cn/img/blog ... 10.png)

![](https://infinilabs.cn/img/blog ... 11.png)

![](https://infinilabs.cn/img/blog ... 12.png)

![](https://infinilabs.cn/img/blog ... 13.png)

调整监控模式


关联成功后,将 ES 集群的监控模式改为 Agent。

![](https://infinilabs.cn/img/blog ... 14.png)

可在监控报表中,查看采集状态。

![](https://infinilabs.cn/img/blog ... 15.png)

查看日志


![](https://infinilabs.cn/img/blog ... 16.png)

至此日志功能已可以使用。

关于 INFINI Console


![](https://infinilabs.cn/img/blog ... 2x.png)

INFINI Console 是一款开源的非常轻量级的多集群、跨版本的搜索基础设施统一管控平台。通过对流行的搜索引擎基础设施进行跨版本、多集群的集中纳管,企业可以快速方便的统一管理企业内部的不同版本的多套搜索集群。INFINI Console 还可以对集群内的索引及数据进行操作管理,可以配置灵活的告警规则,可以指定统一的安全策略,可以查看各个维度的日志和审计信息,真正实现企业级的搜索服务平台化建设和运营。

官网文档:<https://docs.infinilabs.com/console>;
开源地址:<https://github.com/infinilabs/console>;

原文:https://infinilabs.cn/blog/202 ... arch/

谈谈 ES 6.8 到 7.10 的功能变迁(4)- 聚合功能篇

ElasticsearchINFINI Labs 小助手 发表了文章 • 0 个评论 • 494 次浏览 • 3 天前 • 来自相关话题

这一篇我们继续了解 ES 7.10 相较于 ES 6.8 新增的聚合方法。

Rare Terms 聚合


功能说明


用于聚合查询出字段中的稀有项。ES 常见的统计方法是使用 term 查询的正向排序,但是在大数据量和高基数的数据分布场景下会出现 unbounded 错误。Rare 聚合弥补了这个场景的查询方法。注意的是,这个聚合计算出来的是一个近似值。

注意事项


使用限制


  • 只能用于 keyword、numeric、ip 或 boolean 类型字段
  • max_doc_count 参数限制文档数量(默认为 1)
  • precision_threshold 参数控制精度(默认为 3000)

    性能考虑


  • 高基数(数据集中不同值的数量非常多)字段上性能较好
  • 内存消耗相对较大
  • 聚合是在 shard 层做的统计,建议使用合适的 shard 大小

    精度控制


  • 结果是近似值,具体说明[见此](https://www.elastic.co/guide/e ... cision)
  • 可以通过 precision_threshold 调整精度,精度越高,内存消耗越大

    Cumulative Cardinality 聚合


    功能说明


    一个管道聚合,计算 histogram(或 date_histogram)聚合中的累积基数。
    Cumulative_cardinality 聚合对于查找几个时间段内的"新项目"很有用,比如每天网站的新访客数量。常规 Cardinaity 聚合会告诉你每天有多少独立访客,但不会区分"新"或"重复"访客。Cumulative_cardinality 聚合可以用来确定每天有多少独立访问者是"新"的。

    可以通过 precision_threshold 参数调整精度,内存消耗随精度增加而增加。建议根据实际需求调整精度,避免不必要的高精度设置。

    使用要求


  • 需要一个 date_histogram 或 histogram 聚合
  • 需要一个 cardinality 度量聚合
  • buckets_path 必须指向一个有效的 cardinality 聚合

    代码样例


    <br /> GET /user_hits/_search<br /> {<br /> "size": 0,<br /> "aggs": {<br /> "users_per_day": {<br /> "date_histogram": {<br /> "field": "timestamp",<br /> "calendar_interval": "day"<br /> },<br /> "aggs": {<br /> "distinct_users": {<br /> "cardinality": {<br /> "field": "user_id"<br /> }<br /> },<br /> "total_new_users": {<br /> "cumulative_cardinality": {<br /> "buckets_path": "distinct_users"<br /> }<br /> }<br /> }<br /> }<br /> }<br /> }<br />

    Geotile Grid 聚合


    功能说明


    基于 geo_point 字段的地理位置多桶聚合。将地理空间数据按照网格划分,便于可视化和分析。

    注意要点


    1. 网格设置: precision 参数控制网格精度(0-29),精度越高,网格越小,桶数越多。
    2. 高精度会产生大量桶,内存消耗随精度增加而增加。
    3. 只支持 geo_point 类型字段。

      代码样例


      json<br /> POST /museums/_search?size=0<br /> {<br /> "aggregations": {<br /> "tiles-in-bounds": {<br /> "geotile_grid": {<br /> "field": "location",<br /> "precision": 22,<br /> "bounds": {<br /> "top_left": "52.4, 4.9",<br /> "bottom_right": "52.3, 5.0"<br /> }<br /> }<br /> }<br /> }<br /> }<br /> <br />

      T-test 聚合


      功能说明


      T_test 是一种统计假设检验,用于判断测试统计量在零假设下是否服从学生 t 分布(Student’s t-distribution)。它适用于从聚合文档中提取的数值或通过提供的脚本生成的数值。
      该聚合将会返回该检验的 p 值(概率值)。它是在零假设正确的情况下(这意味着总体均值之间没有差异),获得至少与聚合所处理结果一样极端结果的概率。p 值越小,意味着零假设越有可能不正确,总体均值实际上是存在差异的。

      关于 Student’s t-distribution


      Student's t - distribution(学生 t - 分布),简称 t - 分布,是一种概率分布。它在统计学中具有重要地位,特别是在样本量较小且总体标准差未知的情况下用于对总体均值进行估计和假设检验。
      它的形状类似于正态分布,呈钟形曲线,但比正态分布的 “尾部” 更厚。也就是说,t - 分布在均值两侧的极端值出现的概率比正态分布更高。

      测试代码


      json<br /> GET node_upgrade/_search<br /> {<br /> "size": 0,<br /> "aggs": {<br /> "startup_time_ttest": {<br /> "t_test": {<br /> "a": { "field": "startup_time_before" },<br /> "b": { "field": "startup_time_after" },<br /> "type": "paired"<br /> }<br /> }<br /> }<br /> }<br /> <br />

      Variable Width Histogram 可变直方图聚合


      功能说明


      类似于 histogram 的多桶聚合。但与 histogram 不同,每个桶的宽度不是预先指定的,而是根据目标桶数量动态确定间隔

      参数设置


  • field 必须是数值类型
  • buckets 参数指定目标桶数
  • 实际桶数可能少于指定值

    性能考虑


  • 比固定宽度直方图更耗资源,大数据集上可能较慢
  • 建议限制目标桶数量

    使用场景


  • 数据分布不均匀时特别有用
  • 适合探索性数据分析
  • 可以避免空桶或过密桶

    Normalize 归一化聚合


    功能说明


    一个管道聚合,用于计算特定桶值的归一化或重新缩放后的值

    方法选择


    可以归一化处理的方法有:

  • rescale_0_1:0 到 1 重缩放,这种方法对数据进行重新缩放,使得最小值变为 0,最大值变为 1,其余数值则在两者之间进行线性归一化。
  • rescale_0_100:0 到 100 重缩放,该方法对数据进行重新缩放,让最小值变为 0,最大值变为 100,其余数值在它们之间按线性方式进行归一化。
  • percent_of_sum:占总和的百分比,此方法对每个值进行归一化,使其表示为占总值的百分比。
  • mean:均值归一化,这种方法进行归一化时,每个值依据其与平均值的差异程度来进行归一化。
  • zscore:Z 分数归一化,该方法进行归一化时,每个值表示的是其相对于标准差偏离均值的程度。
  • softmax:软最大化归一化,这种方法进行归一化时,先对每个值取指数,然后相对于原始值指数之和来进行归一化。

    参数配置


  • method 参数指定归一化方法
  • buckets_path 指定数据来源
  • 可以设置缺失值处理

    Moving Percentiles 聚合


    功能介绍


    一个管道聚合,对于一组有序的百分位数,移动百分位数聚合(Moving Percentile Aggregation)会在这些百分位数上滑动一个窗口,并计算累积百分位数。

    关于 shift 偏移参数


    默认情况下(偏移量 shift = 0 时),用于计算的窗口是除当前桶之外的最后 n 个值。将偏移量增加 1 会使起始窗口位置向右移动 1 个单位。

  • 若要将当前桶包含在窗口内,请使用 shift = 1。
  • 对于居中对齐(当前桶前后各有 n / 2 个值),使用 shift = window / 2。
  • 对于右对齐(当前桶之后有 n 个值),使用 shift = window。

    如果窗口的任一边缘移动到数据序列边界之外,窗口将会收缩,仅包含可用的值。

    Rate 聚合


    功能说明


    在 date_histogram 的聚合上使用,用于计算每个 date_histogram 桶中的文档速率或字段速率

    rare 聚合支持多种时间单位(如秒、分、时),使用时需要明确指定单位。可以用来计算文档数或字段值,但必须与 date_histogram 一起使用。

    小结


    这一篇粗略的列举了 ES 7.10 版本中新增的聚合方法。相较于查询方法的高使用频率和低资源占用,聚合方法的使用频率相对较少,内存也会有一定的占用,大家可以根据实际场景选择使用。

    推荐阅读


  • [谈谈 ES 6.8 到 7.10 的功能变迁(1)- 性能优化篇](https://infinilabs.cn/blog/202 ... part-1)
  • [谈谈 ES 6.8 到 7.10 的功能变迁(2)- 字段类型篇](https://infinilabs.cn/blog/202 ... part-2)
  • [谈谈 ES 6.8 到 7.10 的功能变迁(3)- 查询方法篇](https://infinilabs.cn/blog/202 ... part-3)
  • [谈谈 ES 6.8 到 7.10 的功能变迁(5)- 任务和集群管理](https://infinilabs.cn/blog/202 ... part-5)
  • [谈谈 ES 6.8 到 7.10 的功能变迁(6)- 其他](https://infinilabs.cn/blog/202 ... part-6)

    关于极限科技(INFINI Labs)


    ![INFINI Labs](https://infinilabs.cn/img/blog ... bs.png)

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

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

    官网:<https://infinilabs.cn>;

    作者:金多安,极限科技(INFINI Labs)搜索运维专家,Elastic 认证专家,搜索客社区日报责任编辑。一直从事与搜索运维相关的工作,日常会去挖掘 ES / Lucene 方向的搜索技术原理,保持搜索相关技术发展的关注。
    原文:https://infinilabs.cn/blog/202 ... rt-4/

【搜索客社区日报】第2034期 (2025-05-09)

社区日报Fred2000 发表了文章 • 0 个评论 • 629 次浏览 • 3 天前 • 来自相关话题

1、Easysearch 时序数据的基于时间范围的合并策略
https://mp.weixin.qq.com/s/EPoD1VzQY5kUNI2vrJc52Q

2、INFINI Console 纳管 Elasticsearch 9
https://infinilabs.cn/blog/202 ... -es9/

3、向量相似度检索遇到天花板,是否我们走错了?
https://mp.weixin.qq.com/s/4f8RaqPgBS7Wm5_z68U9vQ

4、基于 MCP 的 AI Agent 应用开发实践
https://mp.weixin.qq.com/s/hpnE0JTFpF2V9PMuo0hVnw

5、【GitTalk 直播回放】使用 Coco AI 打造 Elasticsearch 智能助手
https://www.bilibili.com/video/BV1rAGyzGEQo/

编辑:Fred
更多资讯:http://news.searchkit.cn

INFINI Console 纳管 Elasticsearch 9(一):指标监控、数据管理、DSL 语句执行

ElasticsearchINFINI Labs 小助手 发表了文章 • 0 个评论 • 1122 次浏览 • 5 天前 • 来自相关话题


Elasticsearch v9.0 版本最近已发布,而 [INFINI Console](https://docs.infinilabs.com/console) 作为一款开源的非常轻量级的多集群、跨版本的搜索基础设施统一管控平台,是否支持最新的 Elasticsearch v9.0 集群管理呢?本文以 INFINI Console v1.29.2 为例,从指标监控、数据管理、DSL 语句执行等方面进行测试。

部署注册


使用 Docker 快速部署 ES9。

bash<br /> docker run --name es9 -p 9201:9200 -it -m 1GB docker.elastic.co/elasticsearch/elasticsearch:9.0.0<br />

使用 Docker 部署 Console,请参考[文档](https://docs.infinilabs.com/co ... ocker/)。

bash<br /> docker run -d --name console -p 9001:9000 infinilabs/console:1.29.2-2008<br />

将 ES9 注册到 Console,默认采集模式为 Agentless。

![](https://infinilabs.cn/img/blog ... 01.png)

![](https://infinilabs.cn/img/blog ... 02.png)

请求模拟


使用 [Loadgen](https://release.infinilabs.com/loadgen/stable/) 模拟数据写入和查询。

```bash
env:
ES_USERNAME: elastic
ES_PASSWORD: CZ-FHm+M5cbfee_yMPZp
ES_ENDPOINT: https://192.168.0.101:9201

runner:

total_rounds: 1

no_warm: true
valid_status_codes_during_warmup: [ 200,201,404 ]

Whether to log all requests

log_requests: false

Whether to log all requests with the specified response status

log_status_codes:

【搜索客社区日报】第2037期 (2025-05-14)

社区日报kin122 发表了文章 • 0 个评论 • 118 次浏览 • 13 小时前 • 来自相关话题

1.得物自研DSearch3.0搜索核心引擎升级之路
https://mp.weixin.qq.com/s/jGZDS7ows_JwUXkaNn7nDQ

2.可观测性方案怎么选?SelectDB vs Elasticsearch vs ClickHouse
https://mp.weixin.qq.com/s/0WRpqTNpiCZtLGw7mHQk0Q

3.可观测性2.0?还是只是日志的卷土重来?
https://mp.weixin.qq.com/s/t48vWLEiJAkln2MD3FppXg



编辑:kin122 
更多资讯:http://news.searchkit.cn