用了Elasticsearch,一口气上5T

社区日报 第1413期 (2022-06-02)

1.Elasticsearch:使用 osquery 和 Elastic Stack 来监控你的端点
https://elasticstack.blog.csdn ... 75260
2.esctl 命令行工具
https://github.com/jeromepin/esctl#developing
3.极限网关配置模板的使用
https://www.bilibili.com/video ... 3.788

编辑: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:使用 osquery 和 Elastic Stack 来监控你的端点
https://elasticstack.blog.csdn ... 75260
2.esctl 命令行工具
https://github.com/jeromepin/esctl#developing
3.极限网关配置模板的使用
https://www.bilibili.com/video ... 3.788

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

发布一个轻量级的 Elasticsearch 压测工具 - Loadgen

你是否遇到过新搭建一个 Elasticsearch 集群,但是却无法评估该集群的最大吞吐是多少,或者使用一些压测工具,比如 esrally,需要花费很大力气准备,但是却无法压测到极限速度,服务器资源跑不满,或者测试产生的数据和实际的业务有很多出入,又或者测试的请求太简单,比如查询,就是对单个固定的搜索请求进行查询,不仅测不准还可能浪费时间没有参考意义,so,有没有一个简单的工具可以支持灵活的自定义压测,并且足够快,答案是 Loadgen。

Loadgen

Elasticsearch 压测工具 Loadgen ,由极限实验室出品,基于 Elasticsearch 的开发运维需求而开发,久经实际客户环境的真实考验,简单好用速度快。

一个没有经过压测的 Elasticsearch 不是一个完整的 Elasticsearch。

Loadgen 具有以下主要特点:

  • 性能强劲
  • 轻量级无依赖
  • 支持模板化参数随机
  • 支持高并发
  • 支持压测端均衡流量控制

只有模拟自己真实业务数据场景的压测才有意义,通过使用 Loadgen 定义写入文档或者查询模板,同时将里面的变量词典化,确保每次请求都是足够随机,变量可以灵活复用,支持多个请求混合压测,最大程度模拟真实环境。

Loadgen

Loadgen 使用非常简单,下载解压之后会得到两个文件,一个可执行程序和一个配置文件 loadgen.yml,配置文件样例如下:

variables:
  - name: ip
    type: file
    path: test/ip.txt
  - name: user
    type: file
    path: test/user.txt
  - name: id
    type: sequence
  - name: uuid
    type: uuid
  - name: now_local
    type: now_local
  - name: now_utc
    type: now_utc
  - name: now_unix
    type: now_unix
requests:
  - request:
      method: GET
      basic_auth:
        username: elastic
        password: pass
      url: http://localhost:8000/medcl/_search
      body: '{  "query": {"match": {    "name": "$[[user]]"  }}}'

变量的使用

上面的配置中,variables 用来定义变量参数,根据 name 来设置变量标识,在构造请求的使用 $[[变量名]] 即可访问该变量的值,变量目前支持的类型有:

类型 说明
file 文件型外部变量参数
sequence 自增数字类型的变量
range 数字范围类型的变量,支持参数 fromto 来限制范围
uuid UUID 字符类型的变量
now_local 当前时间、本地时区
now_utc 当前时间、UTC 时区
now_unix 当前时间、Unix 时间戳

file 类型变量参数加载自外部文本文件,每行一个变量参数,访问该变量时每次随机取其中一个,变量里面的定义格式举例如下:

➜  loadgen git:(master) ✗ cat test/user.txt 
medcl
elastic

请求的定义

配置节点 requests 用来设置 Loadgen 将依次执行的请求,支持固定参数的请求,也可支持模板变量参数化构造请求,以下是一个普通的查询请求:

requests:
  - request:
      method: GET
      basic_auth:
        username: elastic
        password: pass
      url: http://localhost:8000/medcl/_search?q=name:$[[user]]

上面的查询对 medcl 索引进行了查询,并对 name 字段执行一个查询,每次请求的值来自随机变量 user

命令行参数

Loadgen 会循环执行配置文件里面定义的请求,默认 Loadgen 只会运行 5s 就自动退出了,如果希望延长运行时间或者加大并发可以通过启动的时候设置参数来控制,通过查看帮助命令如下:

➜  loadgen git:(master) ✗ ./bin/loadgen --help
Usage of ./bin/loadgen:
  -c int
        Number of concurrent threads (default 1)
  -compress
        Compress requests with gzip
  -config string
        the location of config file, default: loadgen.yml (default "loadgen.yml")
  -d int
        Duration of tests in seconds (default 5)
  -debug
        run in debug mode, loadgen will quit with panic error
  -l int
        Limit total requests (default -1)
  -log string
        the log level,options:trace,debug,info,warn,error (default "info")
  -r int
        Max requests per second (fixed QPS) (default -1)
  -v    version

执行压测

执行 Loadgen 程序即可执行压测,如下:

➜  loadgen git:(master) ✗ ./bin/loadgen -d 30 -c 100 -compress
   __   ___  _      ___  ___   __    __
  / /  /___\/_\    /   \/ _ \ /__\/\ \ \
 / /  //  ///_\\  / /\ / /_\//_\ /  \/ /
/ /__/ \_//  _  \/ /_// /_\\//__/ /\  /
\____|___/\_/ \_/___,'\____/\__/\_\ \/

[LOADGEN] A http load generator and testing suit.
[LOADGEN] 1.0.0_SNAPSHOT, 83f2cb9, Sun Jul 4 13:52:42 2021 +0800, medcl, support single item in dict files
[07-19 16:15:00] [INF] [instance.go:24] workspace: data/loadgen/nodes/0
[07-19 16:15:00] [INF] [loader.go:312] warmup started
[07-19 16:15:00] [INF] [app.go:306] loadgen now started.
[07-19 16:15:00] [INF] [loader.go:316] [GET] http://localhost:8000/medcl/_search
[07-19 16:15:00] [INF] [loader.go:317] status: 200,<nil>,{"took":1,"timed_out":false,"_shards":{"total":1,"successful":1,"skipped":0,"failed":0},"hits":{"total":{"value":0,"relation":"eq"},"max_score":null,"hits":[]}}
[07-19 16:15:00] [INF] [loader.go:316] [GET] http://localhost:8000/medcl/_search?q=name:medcl
[07-19 16:15:00] [INF] [loader.go:317] status: 200,<nil>,{"took":1,"timed_out":false,"_shards":{"total":1,"successful":1,"skipped":0,"failed":0},"hits":{"total":{"value":0,"relation":"eq"},"max_score":null,"hits":[]}}
[07-19 16:15:01] [INF] [loader.go:316] [POST] http://localhost:8000/_bulk
[07-19 16:15:01] [INF] [loader.go:317] status: 200,<nil>,{"took":120,"errors":false,"items":[{"index":{"_index":"medcl-y4","_type":"doc","_id":"c3qj9123r0okahraiej0","_version":1,"result":"created","_shards":{"total":2,"successful":1,"failed":0},"_seq_no":5735852,"_primary_term":3,"status":201}}]}
[07-19 16:15:01] [INF] [loader.go:325] warmup finished

5253 requests in 32.756483336s, 524.61KB sent, 2.49MB received

[Loadgen Client Metrics]
Requests/sec:       175.10
Request Traffic/sec:    17.49KB
Total Transfer/sec: 102.34KB
Avg Req Time:       5.711022ms
Fastest Request:    440.448µs
Slowest Request:    3.624302658s
Number of Errors:   0
Number of Invalid:  0
Status 200:     5253

[Estimated Server Metrics]
Requests/sec:       160.37
Transfer/sec:       93.73KB
Avg Req Time:       623.576686ms

Loadgen 在正式压测之前会将所有的请求执行一次来进行预热,如果出现错误会提示是否继续,预热的请求结果也会输出到终端,执行完成之后会输出执行的摘要信息。

因为 Loadgen 最后的结果是所有请求全部执行完成之后的累计统计,可能存在不准的问题,建议通过打开 Kibana 或者 INFINI Console 的监控仪表板来实时查看 Elasticsearch 的各项运行指标。

模拟批量写入

使用 Loadgen 来模拟 bulk 批量写入也非常简单,在请求体里面配置一条索引操作,然后使用 body_repeat_times 参数来随机参数化复制若干条请求即可完成一批请求的准备,如下:

  - request:
      method: POST
      basic_auth:
        username: test
        password: testtest
      url: http://localhost:8000/_bulk
      body_repeat_times: 1000
      body: "{ \"index\" : { \"_index\" : \"medcl-y4\",\"_type\":\"doc\", \"_id\" : \"$[[uuid]]\" } }\n{ \"id\" : \"$[[id]]\",\"field1\" : \"$[[user]]\",\"ip\" : \"$[[ip]]\",\"now_local\" : \"$[[now_local]]\",\"now_unix\" : \"$[[now_unix]]\" }\n"

限制客户端压力

使用 Loadgen 并设置命令行参数 -r 可以限制客户端发送的每秒请求数,从而评估固定压力下 Elasticsearch 的响应时间和负载情况,如下:

➜  loadgen git:(master) ✗ ./bin/loadgen -d 30 -c 100 -r 100

注意,在大量并发下,此客户端吞吐限制可能不完全准确。

限制请求的总条数

通过设置参数 -l 可以控制客户端发送的请求总数,从而制造固定的文档,修改配置如下:

requests:
  - request:
      method: POST
      basic_auth:
        username: test
        password: testtest
      url: http://localhost:8000/medcl-test/doc2/_bulk
      body_repeat_times: 1
      body: "{ \"index\" : { \"_index\" : \"medcl-test\", \"_id\" : \"$[[uuid]]\" } }\n{ \"id\" : \"$[[id]]\",\"field1\" : \"$[[user]]\",\"ip\" : \"$[[ip]]\" }\n"

每次请求只有一个文档,然后执行 loadgen

./bin/loadgen -config loadgen-gw.yml -d 600 -c 100 -l 50000

执行完成之后,Elasticsearch 的索引 medcl-test 将增加 50000 条记录。

使用自增 ID 来确保文档的顺序性

如果希望生成的文档编号自增有规律,方便进行对比,可以使用 sequence 类型的自增 ID 来作为主键,内容也不要用随机数,如下:

requests:
  - request:
      method: POST
      basic_auth:
        username: test
        password: testtest
      url: http://localhost:8000/medcl-test/doc2/_bulk
      body_repeat_times: 1
      body: "{ \"index\" : { \"_index\" : \"medcl-test\", \"_id\" : \"$[[id]]\" } }\n{ \"id\" : \"$[[id]]\" }\n"

上下文复用变量

在一个请求中,我们可能希望有相同的参数出现,比如 routing 参数用来控制分片的路由,同时我们又希望该参数也保存在文档的 JSON 里面, 可以使用 runtime_variables 来设置请求级别的变量,或者 runtime_body_line_variables 定义请求体级别的变量,如果请求体复制 N 份,每份的参数是不同的,举例如下:

variables:
  - name: id
    type: sequence
  - name: uuid
    type: uuid
  - name: now_local
    type: now_local
  - name: now_utc
    type: now_utc
  - name: now_unix
    type: now_unix
  - name: suffix
    type: range
    from: 10
    to: 15
requests:
  - request:
      method: POST
      runtime_variables:
        batch_no: id
      runtime_body_line_variables:
        routing_no: uuid
      basic_auth:
        username: ingest
        password: password
      #url: http://localhost:8000/_search?q=$[[id]]
      url: http://192.168.3.188:9206/_bulk
      body_repeat_times: 10
      body: "{ \"create\" : { \"_index\" : \"test-$[[suffix]]\",\"_type\":\"doc\", \"_id\" : \"$[[uuid]]\" , \"routing\" : \"$[[routing_no]]\" } }\n{ \"id\" : \"$[[uuid]]\",\"routing_no\" : \"$[[routing_no]]\",\"batch_number\" : \"$[[batch_no]]\", \"random_no\" : \"$[[suffix]]\",\"ip\" : \"$[[ip]]\",\"now_local\" : \"$[[now_local]]\",\"now_unix\" : \"$[[now_unix]]\" }\n"

我们定义了 batch_no 变量来代表一批文档里面的相同批次号,同时又定义了 routing_no 变量来代表每个文档级别的 routing 值。

最后,欢迎大家反馈使用过程遇到的任何问题。

继续阅读 »

你是否遇到过新搭建一个 Elasticsearch 集群,但是却无法评估该集群的最大吞吐是多少,或者使用一些压测工具,比如 esrally,需要花费很大力气准备,但是却无法压测到极限速度,服务器资源跑不满,或者测试产生的数据和实际的业务有很多出入,又或者测试的请求太简单,比如查询,就是对单个固定的搜索请求进行查询,不仅测不准还可能浪费时间没有参考意义,so,有没有一个简单的工具可以支持灵活的自定义压测,并且足够快,答案是 Loadgen。

Loadgen

Elasticsearch 压测工具 Loadgen ,由极限实验室出品,基于 Elasticsearch 的开发运维需求而开发,久经实际客户环境的真实考验,简单好用速度快。

一个没有经过压测的 Elasticsearch 不是一个完整的 Elasticsearch。

Loadgen 具有以下主要特点:

  • 性能强劲
  • 轻量级无依赖
  • 支持模板化参数随机
  • 支持高并发
  • 支持压测端均衡流量控制

只有模拟自己真实业务数据场景的压测才有意义,通过使用 Loadgen 定义写入文档或者查询模板,同时将里面的变量词典化,确保每次请求都是足够随机,变量可以灵活复用,支持多个请求混合压测,最大程度模拟真实环境。

Loadgen

Loadgen 使用非常简单,下载解压之后会得到两个文件,一个可执行程序和一个配置文件 loadgen.yml,配置文件样例如下:

variables:
  - name: ip
    type: file
    path: test/ip.txt
  - name: user
    type: file
    path: test/user.txt
  - name: id
    type: sequence
  - name: uuid
    type: uuid
  - name: now_local
    type: now_local
  - name: now_utc
    type: now_utc
  - name: now_unix
    type: now_unix
requests:
  - request:
      method: GET
      basic_auth:
        username: elastic
        password: pass
      url: http://localhost:8000/medcl/_search
      body: '{  "query": {"match": {    "name": "$[[user]]"  }}}'

变量的使用

上面的配置中,variables 用来定义变量参数,根据 name 来设置变量标识,在构造请求的使用 $[[变量名]] 即可访问该变量的值,变量目前支持的类型有:

类型 说明
file 文件型外部变量参数
sequence 自增数字类型的变量
range 数字范围类型的变量,支持参数 fromto 来限制范围
uuid UUID 字符类型的变量
now_local 当前时间、本地时区
now_utc 当前时间、UTC 时区
now_unix 当前时间、Unix 时间戳

file 类型变量参数加载自外部文本文件,每行一个变量参数,访问该变量时每次随机取其中一个,变量里面的定义格式举例如下:

➜  loadgen git:(master) ✗ cat test/user.txt 
medcl
elastic

请求的定义

配置节点 requests 用来设置 Loadgen 将依次执行的请求,支持固定参数的请求,也可支持模板变量参数化构造请求,以下是一个普通的查询请求:

requests:
  - request:
      method: GET
      basic_auth:
        username: elastic
        password: pass
      url: http://localhost:8000/medcl/_search?q=name:$[[user]]

上面的查询对 medcl 索引进行了查询,并对 name 字段执行一个查询,每次请求的值来自随机变量 user

命令行参数

Loadgen 会循环执行配置文件里面定义的请求,默认 Loadgen 只会运行 5s 就自动退出了,如果希望延长运行时间或者加大并发可以通过启动的时候设置参数来控制,通过查看帮助命令如下:

➜  loadgen git:(master) ✗ ./bin/loadgen --help
Usage of ./bin/loadgen:
  -c int
        Number of concurrent threads (default 1)
  -compress
        Compress requests with gzip
  -config string
        the location of config file, default: loadgen.yml (default "loadgen.yml")
  -d int
        Duration of tests in seconds (default 5)
  -debug
        run in debug mode, loadgen will quit with panic error
  -l int
        Limit total requests (default -1)
  -log string
        the log level,options:trace,debug,info,warn,error (default "info")
  -r int
        Max requests per second (fixed QPS) (default -1)
  -v    version

执行压测

执行 Loadgen 程序即可执行压测,如下:

➜  loadgen git:(master) ✗ ./bin/loadgen -d 30 -c 100 -compress
   __   ___  _      ___  ___   __    __
  / /  /___\/_\    /   \/ _ \ /__\/\ \ \
 / /  //  ///_\\  / /\ / /_\//_\ /  \/ /
/ /__/ \_//  _  \/ /_// /_\\//__/ /\  /
\____|___/\_/ \_/___,'\____/\__/\_\ \/

[LOADGEN] A http load generator and testing suit.
[LOADGEN] 1.0.0_SNAPSHOT, 83f2cb9, Sun Jul 4 13:52:42 2021 +0800, medcl, support single item in dict files
[07-19 16:15:00] [INF] [instance.go:24] workspace: data/loadgen/nodes/0
[07-19 16:15:00] [INF] [loader.go:312] warmup started
[07-19 16:15:00] [INF] [app.go:306] loadgen now started.
[07-19 16:15:00] [INF] [loader.go:316] [GET] http://localhost:8000/medcl/_search
[07-19 16:15:00] [INF] [loader.go:317] status: 200,<nil>,{"took":1,"timed_out":false,"_shards":{"total":1,"successful":1,"skipped":0,"failed":0},"hits":{"total":{"value":0,"relation":"eq"},"max_score":null,"hits":[]}}
[07-19 16:15:00] [INF] [loader.go:316] [GET] http://localhost:8000/medcl/_search?q=name:medcl
[07-19 16:15:00] [INF] [loader.go:317] status: 200,<nil>,{"took":1,"timed_out":false,"_shards":{"total":1,"successful":1,"skipped":0,"failed":0},"hits":{"total":{"value":0,"relation":"eq"},"max_score":null,"hits":[]}}
[07-19 16:15:01] [INF] [loader.go:316] [POST] http://localhost:8000/_bulk
[07-19 16:15:01] [INF] [loader.go:317] status: 200,<nil>,{"took":120,"errors":false,"items":[{"index":{"_index":"medcl-y4","_type":"doc","_id":"c3qj9123r0okahraiej0","_version":1,"result":"created","_shards":{"total":2,"successful":1,"failed":0},"_seq_no":5735852,"_primary_term":3,"status":201}}]}
[07-19 16:15:01] [INF] [loader.go:325] warmup finished

5253 requests in 32.756483336s, 524.61KB sent, 2.49MB received

[Loadgen Client Metrics]
Requests/sec:       175.10
Request Traffic/sec:    17.49KB
Total Transfer/sec: 102.34KB
Avg Req Time:       5.711022ms
Fastest Request:    440.448µs
Slowest Request:    3.624302658s
Number of Errors:   0
Number of Invalid:  0
Status 200:     5253

[Estimated Server Metrics]
Requests/sec:       160.37
Transfer/sec:       93.73KB
Avg Req Time:       623.576686ms

Loadgen 在正式压测之前会将所有的请求执行一次来进行预热,如果出现错误会提示是否继续,预热的请求结果也会输出到终端,执行完成之后会输出执行的摘要信息。

因为 Loadgen 最后的结果是所有请求全部执行完成之后的累计统计,可能存在不准的问题,建议通过打开 Kibana 或者 INFINI Console 的监控仪表板来实时查看 Elasticsearch 的各项运行指标。

模拟批量写入

使用 Loadgen 来模拟 bulk 批量写入也非常简单,在请求体里面配置一条索引操作,然后使用 body_repeat_times 参数来随机参数化复制若干条请求即可完成一批请求的准备,如下:

  - request:
      method: POST
      basic_auth:
        username: test
        password: testtest
      url: http://localhost:8000/_bulk
      body_repeat_times: 1000
      body: "{ \"index\" : { \"_index\" : \"medcl-y4\",\"_type\":\"doc\", \"_id\" : \"$[[uuid]]\" } }\n{ \"id\" : \"$[[id]]\",\"field1\" : \"$[[user]]\",\"ip\" : \"$[[ip]]\",\"now_local\" : \"$[[now_local]]\",\"now_unix\" : \"$[[now_unix]]\" }\n"

限制客户端压力

使用 Loadgen 并设置命令行参数 -r 可以限制客户端发送的每秒请求数,从而评估固定压力下 Elasticsearch 的响应时间和负载情况,如下:

➜  loadgen git:(master) ✗ ./bin/loadgen -d 30 -c 100 -r 100

注意,在大量并发下,此客户端吞吐限制可能不完全准确。

限制请求的总条数

通过设置参数 -l 可以控制客户端发送的请求总数,从而制造固定的文档,修改配置如下:

requests:
  - request:
      method: POST
      basic_auth:
        username: test
        password: testtest
      url: http://localhost:8000/medcl-test/doc2/_bulk
      body_repeat_times: 1
      body: "{ \"index\" : { \"_index\" : \"medcl-test\", \"_id\" : \"$[[uuid]]\" } }\n{ \"id\" : \"$[[id]]\",\"field1\" : \"$[[user]]\",\"ip\" : \"$[[ip]]\" }\n"

每次请求只有一个文档,然后执行 loadgen

./bin/loadgen -config loadgen-gw.yml -d 600 -c 100 -l 50000

执行完成之后,Elasticsearch 的索引 medcl-test 将增加 50000 条记录。

使用自增 ID 来确保文档的顺序性

如果希望生成的文档编号自增有规律,方便进行对比,可以使用 sequence 类型的自增 ID 来作为主键,内容也不要用随机数,如下:

requests:
  - request:
      method: POST
      basic_auth:
        username: test
        password: testtest
      url: http://localhost:8000/medcl-test/doc2/_bulk
      body_repeat_times: 1
      body: "{ \"index\" : { \"_index\" : \"medcl-test\", \"_id\" : \"$[[id]]\" } }\n{ \"id\" : \"$[[id]]\" }\n"

上下文复用变量

在一个请求中,我们可能希望有相同的参数出现,比如 routing 参数用来控制分片的路由,同时我们又希望该参数也保存在文档的 JSON 里面, 可以使用 runtime_variables 来设置请求级别的变量,或者 runtime_body_line_variables 定义请求体级别的变量,如果请求体复制 N 份,每份的参数是不同的,举例如下:

variables:
  - name: id
    type: sequence
  - name: uuid
    type: uuid
  - name: now_local
    type: now_local
  - name: now_utc
    type: now_utc
  - name: now_unix
    type: now_unix
  - name: suffix
    type: range
    from: 10
    to: 15
requests:
  - request:
      method: POST
      runtime_variables:
        batch_no: id
      runtime_body_line_variables:
        routing_no: uuid
      basic_auth:
        username: ingest
        password: password
      #url: http://localhost:8000/_search?q=$[[id]]
      url: http://192.168.3.188:9206/_bulk
      body_repeat_times: 10
      body: "{ \"create\" : { \"_index\" : \"test-$[[suffix]]\",\"_type\":\"doc\", \"_id\" : \"$[[uuid]]\" , \"routing\" : \"$[[routing_no]]\" } }\n{ \"id\" : \"$[[uuid]]\",\"routing_no\" : \"$[[routing_no]]\",\"batch_number\" : \"$[[batch_no]]\", \"random_no\" : \"$[[suffix]]\",\"ip\" : \"$[[ip]]\",\"now_local\" : \"$[[now_local]]\",\"now_unix\" : \"$[[now_unix]]\" }\n"

我们定义了 batch_no 变量来代表一批文档里面的相同批次号,同时又定义了 routing_no 变量来代表每个文档级别的 routing 值。

最后,欢迎大家反馈使用过程遇到的任何问题。

收起阅读 »

社区日报 第1412期 (2022-06-01)

1. Elasticsearch查询——Profile API
https://blog.csdn.net/qq330983 ... 57930
2. match 查询中 minimum_should_match 的使用方式(需要梯子)
https://medium.com/%40sean1223 ... 09f3d
3. ES 中 disjunction max 查询的使用(需要梯子)
https://medium.com/%40sean1223 ... d9ac9

编辑: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查询——Profile API
https://blog.csdn.net/qq330983 ... 57930
2. match 查询中 minimum_should_match 的使用方式(需要梯子)
https://medium.com/%40sean1223 ... 09f3d
3. ES 中 disjunction max 查询的使用(需要梯子)
https://medium.com/%40sean1223 ... d9ac9

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

社区日报 第1411期 (2022-05-31)


1. 保姆级ES dsl 教学(需要梯子)
https://medium.com/geekculture ... 10c0e

2. 谁会是Kibana的planB?(需要梯子)
https://medium.com/geekculture ... 14e00

3. 我可以在k8s上部署ES吗(需要梯子)
https://medium.com/99dotco/a-d ... 60466

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

1. 保姆级ES dsl 教学(需要梯子)
https://medium.com/geekculture ... 10c0e

2. 谁会是Kibana的planB?(需要梯子)
https://medium.com/geekculture ... 14e00

3. 我可以在k8s上部署ES吗(需要梯子)
https://medium.com/99dotco/a-d ... 60466

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

社区日报 第1410期 (2022-05-30)


1. Elasticsearch架构解析与最佳实践
   https://zhuanlan.zhihu.com/p/157964955

2. Elasticsearch 理解搜索中的 precision 及 recall
   https://blog.csdn.net/UbuntuTo ... 12610

3. Elasticsearch 百度NLP中文分词插件
   https://cloud.baidu.com/doc/BES/s/Lke3o72jg

编辑: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架构解析与最佳实践
   https://zhuanlan.zhihu.com/p/157964955

2. Elasticsearch 理解搜索中的 precision 及 recall
   https://blog.csdn.net/UbuntuTo ... 12610

3. Elasticsearch 百度NLP中文分词插件
   https://cloud.baidu.com/doc/BES/s/Lke3o72jg

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

社区日报 第1409期 (2022-05-29)

1. Elasticsearch 企业级安全扩展:readonlyrest
https://readonlyrest.com/
2. Elasticsearch 流行工具清单
https://github.com/dzharii/awesome-elasticsearch
 
3. Elasticsearch 在机器学习上的应用
https://www.modb.pro/db/69770

编辑:cyberdak
归档:https://ela.st/cn-daily-all
订阅:https://ela.st/cn-daily-sub
沙龙:https://ela.st/cn-meetup
B站:https://ela.st/bilibili
继续阅读 »
1. Elasticsearch 企业级安全扩展:readonlyrest
https://readonlyrest.com/
2. Elasticsearch 流行工具清单
https://github.com/dzharii/awesome-elasticsearch
 
3. Elasticsearch 在机器学习上的应用
https://www.modb.pro/db/69770

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

社区日报 第1408期 (2022-05-28)

1、 elasticsearch-spark 的用法
https://www.cnblogs.com/w15706 ... .html
2、利用 Elasticsearch 实现类主流搜索引擎广告置顶显示效果
https://blog.csdn.net/weixin_4 ... 42338
3、Elasticsearch 运维实践
https://www.modb.pro/db/403820
 
编辑:李静
归档:https://ela.st/cn-daily-all
订阅:https://ela.st/cn-daily-sub
沙龙:https://ela.st/cn-meetup
B站:https://ela.st/bilibili
继续阅读 »
1、 elasticsearch-spark 的用法
https://www.cnblogs.com/w15706 ... .html
2、利用 Elasticsearch 实现类主流搜索引擎广告置顶显示效果
https://blog.csdn.net/weixin_4 ... 42338
3、Elasticsearch 运维实践
https://www.modb.pro/db/403820
 
编辑:李静
归档:https://ela.st/cn-daily-all
订阅:https://ela.st/cn-daily-sub
沙龙:https://ela.st/cn-meetup
B站:https://ela.st/bilibili 收起阅读 »

Elasticsearch:如何部署 NLP:命名实体识别 (NER) 示例

在本文章中,我们将通过一个示例,使用命名实体识别 (NER - Name Entity Recognition) NLP 模型来定位和提取非结构化文本字段中预定义的实体类别。 使用公开可用的模型,我们将向你展示如何将该模型部署到 Elasticsearch,使用新的 _infer API在文本中查找命名实体,并在提取管道中使用 NER 模型在文档被提取到 Elasticsearch 时提取实体。

NER 模型对于使用自然语言从全文字段中提取人物(people)、地点(places)和组织(organization)等实体很有用。

在此示例中,我们将通过 NER 模型运行《悲惨世界》一书的段落,并使用该模型从文本中提取字符和位置,并将它们之间的关系可视化。

更多关于 NLP 的阅读:

Elasticsearch:如何部署 NLP:文本嵌入和向量搜索

在 Elasticsearch 中使用 PyTorch 进行现代自然语言处理的介绍

Elasticsearch:如何部署 NLP:情绪分析示例

安装
如果你还没有安装好自己的 Elasticsearch,Kibana 及 Eland,那么请阅读之前的文章 “Elasticsearch:如何部署 NLP:文本嵌入和向量搜索”。

将 NER 模型部署到 Elasticsearch
首先,我们需要选择一个可以从文本字段中提取字符名称和位置的 NER 模型。 幸运的是,我们可以在 Hugging Face 上选择一些可用的 NER 模型,并查看 Elastic 文档,我们看到一个 uncased NER model from Elastic  模型。

现在我们已经选择了要使用的 NER 模型,我们可以使用 Eland 来安装模型。 在本例中,我们将通过 docker 镜像运行 Eland 命令,但首先我们必须通过克隆 Eland GitHub 存储库来构建 docker 镜像,并在你的客户端系统上创建 Eland 的 docker 镜像。详细步骤请在文章  “Elasticsearch:如何部署 NLP:文本嵌入和向量搜索”。中进行查看,这里就不再赘述了。

我们接下来使用如下的命令来上传模型:

docker run -it --rm elastic/eland \
    eland_import_hub_model \
      --url https://elastic:lOwgBZT3KowJrQ ... 9200/ \
      --hub-model-id elastic/distilbert-base-uncased-finetuned-conll03-english \
      --task-type ner \
      --insecure \
      —-start 
注意:请根据自己的用户账号信息更新 --url 选项中的 Elasticsearch 信息。由于我们使用的是自签名的证书部署的,在这里,我们使用 --insecure 来规避 SSL 签名证书的检查。

由于我们在 eland import 命令末尾使用了 --start 选项,因此 Elasticsearch 会将模型部署到所有可用的机器学习节点并将模型加载到内存中。 如果我们有多个模型并且想要选择要部署的模型,我们可以使用 Kibana 的机器学习 > 模型管理用户界面来管理模型的启动和停止。

原文链接:https://blog.csdn.net/UbuntuTo ... 77711
继续阅读 »
在本文章中,我们将通过一个示例,使用命名实体识别 (NER - Name Entity Recognition) NLP 模型来定位和提取非结构化文本字段中预定义的实体类别。 使用公开可用的模型,我们将向你展示如何将该模型部署到 Elasticsearch,使用新的 _infer API在文本中查找命名实体,并在提取管道中使用 NER 模型在文档被提取到 Elasticsearch 时提取实体。

NER 模型对于使用自然语言从全文字段中提取人物(people)、地点(places)和组织(organization)等实体很有用。

在此示例中,我们将通过 NER 模型运行《悲惨世界》一书的段落,并使用该模型从文本中提取字符和位置,并将它们之间的关系可视化。

更多关于 NLP 的阅读:

Elasticsearch:如何部署 NLP:文本嵌入和向量搜索

在 Elasticsearch 中使用 PyTorch 进行现代自然语言处理的介绍

Elasticsearch:如何部署 NLP:情绪分析示例

安装
如果你还没有安装好自己的 Elasticsearch,Kibana 及 Eland,那么请阅读之前的文章 “Elasticsearch:如何部署 NLP:文本嵌入和向量搜索”。

将 NER 模型部署到 Elasticsearch
首先,我们需要选择一个可以从文本字段中提取字符名称和位置的 NER 模型。 幸运的是,我们可以在 Hugging Face 上选择一些可用的 NER 模型,并查看 Elastic 文档,我们看到一个 uncased NER model from Elastic  模型。

现在我们已经选择了要使用的 NER 模型,我们可以使用 Eland 来安装模型。 在本例中,我们将通过 docker 镜像运行 Eland 命令,但首先我们必须通过克隆 Eland GitHub 存储库来构建 docker 镜像,并在你的客户端系统上创建 Eland 的 docker 镜像。详细步骤请在文章  “Elasticsearch:如何部署 NLP:文本嵌入和向量搜索”。中进行查看,这里就不再赘述了。

我们接下来使用如下的命令来上传模型:

docker run -it --rm elastic/eland \
    eland_import_hub_model \
      --url https://elastic:lOwgBZT3KowJrQ ... 9200/ \
      --hub-model-id elastic/distilbert-base-uncased-finetuned-conll03-english \
      --task-type ner \
      --insecure \
      —-start 
注意:请根据自己的用户账号信息更新 --url 选项中的 Elasticsearch 信息。由于我们使用的是自签名的证书部署的,在这里,我们使用 --insecure 来规避 SSL 签名证书的检查。

由于我们在 eland import 命令末尾使用了 --start 选项,因此 Elasticsearch 会将模型部署到所有可用的机器学习节点并将模型加载到内存中。 如果我们有多个模型并且想要选择要部署的模型,我们可以使用 Kibana 的机器学习 > 模型管理用户界面来管理模型的启动和停止。

原文链接:https://blog.csdn.net/UbuntuTo ... 77711 收起阅读 »

Elasticsearch:Elastic Maps 现在支持机器学习异常层

现在可以在 Elastic Maps 中查看使用 geographical functions 的机器学习 (ML) 异常检测作业的结果。 Elastic Maps 8.1.0 版本可以按位置生成异常地图,帮助你探索数据中的新趋势。

Elastic Maps 在 Elastic Cloud 上可用。 你还可以下载 Elastic Stack 和我们的云编排产品 Elastic Cloud Enterprise (ECE) 和 Elastic Cloud for Kubernetes (ECK),以获得自我管理的体验。

在此示例中,我们将使用通用运输饲料规范 (GTFS) 数据。 GTFS 定义了公共交通时刻表和相关地理信息的通用格式。

在下面的展示中,我将使用 Elastic Stack 8.2 来进行展示。

Geographical functions
地理功能检测输入数据的地理位置异常。lat_long 函数检测输入数据的地理位置异常。

注意:你不能为包含地理函数的异常检测作业创建预测。 你也不能将带有条件的规则添加到使用地理函数的检测器中。

该函数支持以下属性:

field_name (required)
by_field_name (optional)
over_field_name (optional)
partition_field_name (optional)
比如,我们在如下的例子中,使用 lat_long 函数来分析信用卡交易的异常:

PUT _ml/anomaly_detectors/example1
{
  "analysis_config": {
    "detectors": [{
      "function" : "lat_long",
      "field_name" : "transaction_coordinates",
      "by_field_name" : "credit_card_number"
    }]
  },
  "data_description": {
    "time_field":"timestamp",
    "time_format": "epoch_ms"
  }
}
我们知道,在通常的情况下,你的信用卡不可能在一个很小的时间范围里,在美国和中国同时耍卡,除非飞机飞的真的很快很快。如果你在异常检测作业的检测器中使用此 lat_long 函数,它会检测到信用卡交易的地理位置对于特定客户的信用卡而言的异常。 异常可能表明存在欺诈。

重要:你提供的 field_name 必须是一个字符串,其中包含两个逗号分隔的数字,格式为纬度、经度、geo_point 字段、包含点值的 geo_shape 字段或 geo_centroid 聚合。 纬度和经度必须在 -180 到 180 的范围内,并且代表地球表面上的一个点。

比如,JSON 数据可能包含以下交易坐标:

{
  "time": 1460464275,
  "transaction_coordinates": "40.7,-74.0",
  "credit_card_number": "1234123412341234"
}
在 Elasticsearch 中,位置数据很可能存储在 geo_point 字段中。 有关详细信息,请参阅 geo_point 数据类型。 机器学习功能原生支持此数据类型。 具体来说,当从 geo_point 字段中提取数据时,datafeed 将在发送到异常检测作业之前将数据转换为适当的纬度、经度字符串格式。
Elasticsearch:Elastic Maps 现在支持机器学习异常层原文链接:https://blog.csdn.net/UbuntuTo ... 58783
继续阅读 »
现在可以在 Elastic Maps 中查看使用 geographical functions 的机器学习 (ML) 异常检测作业的结果。 Elastic Maps 8.1.0 版本可以按位置生成异常地图,帮助你探索数据中的新趋势。

Elastic Maps 在 Elastic Cloud 上可用。 你还可以下载 Elastic Stack 和我们的云编排产品 Elastic Cloud Enterprise (ECE) 和 Elastic Cloud for Kubernetes (ECK),以获得自我管理的体验。

在此示例中,我们将使用通用运输饲料规范 (GTFS) 数据。 GTFS 定义了公共交通时刻表和相关地理信息的通用格式。

在下面的展示中,我将使用 Elastic Stack 8.2 来进行展示。

Geographical functions
地理功能检测输入数据的地理位置异常。lat_long 函数检测输入数据的地理位置异常。

注意:你不能为包含地理函数的异常检测作业创建预测。 你也不能将带有条件的规则添加到使用地理函数的检测器中。

该函数支持以下属性:

field_name (required)
by_field_name (optional)
over_field_name (optional)
partition_field_name (optional)
比如,我们在如下的例子中,使用 lat_long 函数来分析信用卡交易的异常:

PUT _ml/anomaly_detectors/example1
{
  "analysis_config": {
    "detectors": [{
      "function" : "lat_long",
      "field_name" : "transaction_coordinates",
      "by_field_name" : "credit_card_number"
    }]
  },
  "data_description": {
    "time_field":"timestamp",
    "time_format": "epoch_ms"
  }
}
我们知道,在通常的情况下,你的信用卡不可能在一个很小的时间范围里,在美国和中国同时耍卡,除非飞机飞的真的很快很快。如果你在异常检测作业的检测器中使用此 lat_long 函数,它会检测到信用卡交易的地理位置对于特定客户的信用卡而言的异常。 异常可能表明存在欺诈。

重要:你提供的 field_name 必须是一个字符串,其中包含两个逗号分隔的数字,格式为纬度、经度、geo_point 字段、包含点值的 geo_shape 字段或 geo_centroid 聚合。 纬度和经度必须在 -180 到 180 的范围内,并且代表地球表面上的一个点。

比如,JSON 数据可能包含以下交易坐标:

{
  "time": 1460464275,
  "transaction_coordinates": "40.7,-74.0",
  "credit_card_number": "1234123412341234"
}
在 Elasticsearch 中,位置数据很可能存储在 geo_point 字段中。 有关详细信息,请参阅 geo_point 数据类型。 机器学习功能原生支持此数据类型。 具体来说,当从 geo_point 字段中提取数据时,datafeed 将在发送到异常检测作业之前将数据转换为适当的纬度、经度字符串格式。
Elasticsearch:Elastic Maps 现在支持机器学习异常层原文链接:https://blog.csdn.net/UbuntuTo ... 58783 收起阅读 »

​社区日报 第1406期 (2022-05-26)

1.Elasticsearch Span Query 是什么?
https://lucidworks.com/post/the-spanquery/
2.理解 Elasticsearch Percolate 查询
https://blog.csdn.net/UbuntuTo ... 27651
3. 用 Elasticsearch 造个“知网”难不难?
https://mp.weixin.qq.com/s/tlLaCoi7A0xAM0ZTZw6tyw

编辑: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 Span Query 是什么?
https://lucidworks.com/post/the-spanquery/
2.理解 Elasticsearch Percolate 查询
https://blog.csdn.net/UbuntuTo ... 27651
3. 用 Elasticsearch 造个“知网”难不难?
https://mp.weixin.qq.com/s/tlLaCoi7A0xAM0ZTZw6tyw

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

社区日报 第1405期 (2022-05-25)

1. ES 高亮是否能设置成单词部分高亮?
https://discuss.elastic.co/t/h ... 370/2
2. 怎么去全文检索?mysql vs ES(需要梯子)
https://blog.devgenius.io/how- ... f816e
3. Elasticsearch 7.x 自定义相关度计算 - function_score查询 script_score,field_value_factor及decay functions参数
https://blog.csdn.net/biao0309 ... 23608

编辑:kin122
归档: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://discuss.elastic.co/t/h ... 370/2
2. 怎么去全文检索?mysql vs ES(需要梯子)
https://blog.devgenius.io/how- ... f816e
3. Elasticsearch 7.x 自定义相关度计算 - function_score查询 script_score,field_value_factor及decay functions参数
https://blog.csdn.net/biao0309 ... 23608

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

Elasticsearch:如何部署 NLP:文本嵌入和向量搜索

作为我们自然语言处理 (NLP) 博客系列的一部分,我们将介绍一个使用文本嵌入模型生成文本内容的向量表示并演示对生成的向量进行向量相似性搜索的示例。我们将在 Elasticsearch 上部署一个公开可用的模型,并在摄取管道中使用它来从文本文档生成嵌入。然后,我们将展示如何在向量相似性搜索中使用这些嵌入(embedding)来查找给定查询的语义相似文档。

矢量相似性搜索(vector similarity search),或者通常称为语义搜索,超越了传统的基于关键字的搜索,允许用户找到可能没有任何共同关键字的语义相似的文档,从而提供更广泛的结果。向量相似性搜索对密集向量进行操作,并使用 k-最近邻(k-nearest neighbour)搜索来查找相似向量。为此,首先需要使用文本嵌入模型将文本形式的内容转换为其数字向量表示。

我们将使用来自 MS MARCO Passage Ranking Task 的公共数据集进行演示。它由来自 Microsoft Bing 搜索引擎的真实问题和人工生成的答案组成。该数据集是测试向量相似性搜索的完美资源,首先,因为问答是向量搜索最常见的用例之一,其次,MS MARCO 排行榜中的顶级论文以某种形式使用了向量搜索。

在我们的示例中,我们将使用此数据集的样本,使用模型生成文本嵌入,然后对其运行向量搜索。我们还希望对向量搜索产生的结果的质量进行快速验证。在今天的展示中,我将使用 Elastic Stack 8.2 来进行展示。
https://elasticstack.blog.csdn ... 20166
继续阅读 »
作为我们自然语言处理 (NLP) 博客系列的一部分,我们将介绍一个使用文本嵌入模型生成文本内容的向量表示并演示对生成的向量进行向量相似性搜索的示例。我们将在 Elasticsearch 上部署一个公开可用的模型,并在摄取管道中使用它来从文本文档生成嵌入。然后,我们将展示如何在向量相似性搜索中使用这些嵌入(embedding)来查找给定查询的语义相似文档。

矢量相似性搜索(vector similarity search),或者通常称为语义搜索,超越了传统的基于关键字的搜索,允许用户找到可能没有任何共同关键字的语义相似的文档,从而提供更广泛的结果。向量相似性搜索对密集向量进行操作,并使用 k-最近邻(k-nearest neighbour)搜索来查找相似向量。为此,首先需要使用文本嵌入模型将文本形式的内容转换为其数字向量表示。

我们将使用来自 MS MARCO Passage Ranking Task 的公共数据集进行演示。它由来自 Microsoft Bing 搜索引擎的真实问题和人工生成的答案组成。该数据集是测试向量相似性搜索的完美资源,首先,因为问答是向量搜索最常见的用例之一,其次,MS MARCO 排行榜中的顶级论文以某种形式使用了向量搜索。

在我们的示例中,我们将使用此数据集的样本,使用模型生成文本嵌入,然后对其运行向量搜索。我们还希望对向量搜索产生的结果的质量进行快速验证。在今天的展示中,我将使用 Elastic Stack 8.2 来进行展示。
https://elasticstack.blog.csdn ... 20166 收起阅读 »

社区日报 第1404期 (2022-05-24)

1. 用fluent配合ES构建日志体系(需要梯子)
https://medium.com/hepsiburada ... e28aa

2. 用Serilog和ES搭建 net core 的日志体系(需要梯子)
https://medium.com/%40matias.p ... f4c1e

3. ES为啥在Adyen stack是不可或缺的组件(需要梯子)
https://medium.com/adyen/why-e ... 89cc1

编辑:斯蒂文
归档:https://ela.st/cn-daily-all
订阅:https://ela.st/cn-daily-sub
沙龙:https://ela.st/cn-meetup
B站:https://ela.st/bilibili
继续阅读 »
1. 用fluent配合ES构建日志体系(需要梯子)
https://medium.com/hepsiburada ... e28aa

2. 用Serilog和ES搭建 net core 的日志体系(需要梯子)
https://medium.com/%40matias.p ... f4c1e

3. ES为啥在Adyen stack是不可或缺的组件(需要梯子)
https://medium.com/adyen/why-e ... 89cc1

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

【Elastic社区线上Meetup直播】使用Elastic Stack地理位置分析功能分析疫情态势

Elastic社区线上Meetup

B站直播:http://live.bilibili.com/24361271

YouTube直播:https://www.youtube.com/c/OfficialElasticCommunity

主题:使用Elastic Stack地理位置分析功能分析疫情态势

日期:2022年5月26日,14:30 - 15:30(UTC+8)

讲师:杰瑞朱,Elastic资深解决方案架构师,Elastic认证工程师

摘要:Elasticsearch具有很强的地理位置查询和聚合计算能力,Kibana也内含了功能强大的地图工具,两者结合可以很方便地应用于地理位置相关的分析场景。杰瑞在上海封城期间,一直使用这些强大的工具来分析周边的疫情态势,本次活动以上海每日疫情数据为例,详解这些工具的使用方法,可以让听众快速上手并应用于更多的地理位置分析场景。

中文meetup每月最后一个周四准时上线,欢迎报名分享您的技术心得,讲师报名请发送邮件至:meetups@elastic.co。谢谢!   原文链接:

继续阅读 »

Elastic社区线上Meetup

B站直播:http://live.bilibili.com/24361271

YouTube直播:https://www.youtube.com/c/OfficialElasticCommunity

主题:使用Elastic Stack地理位置分析功能分析疫情态势

日期:2022年5月26日,14:30 - 15:30(UTC+8)

讲师:杰瑞朱,Elastic资深解决方案架构师,Elastic认证工程师

摘要:Elasticsearch具有很强的地理位置查询和聚合计算能力,Kibana也内含了功能强大的地图工具,两者结合可以很方便地应用于地理位置相关的分析场景。杰瑞在上海封城期间,一直使用这些强大的工具来分析周边的疫情态势,本次活动以上海每日疫情数据为例,详解这些工具的使用方法,可以让听众快速上手并应用于更多的地理位置分析场景。

中文meetup每月最后一个周四准时上线,欢迎报名分享您的技术心得,讲师报名请发送邮件至:meetups@elastic.co。谢谢!   原文链接:

收起阅读 »

社区日报 第1403期 (2022-05-23)

1. Elasticsearch架构解析与最佳实践
   https://zhuanlan.zhihu.com/p/157964955

2. Elasticsearch 性能优化
   https://mp.weixin.qq.com/s/VHULA5vfDBxjGzukZyYJbg

3. Elasticsearch 索引设计指南
   https://blog.csdn.net/laoyang3 ... 64442

编辑: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架构解析与最佳实践
   https://zhuanlan.zhihu.com/p/157964955

2. Elasticsearch 性能优化
   https://mp.weixin.qq.com/s/VHULA5vfDBxjGzukZyYJbg

3. Elasticsearch 索引设计指南
   https://blog.csdn.net/laoyang3 ... 64442

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