搜索结果正在快递途中

Elastic日报 第1377期 (2022-04-19)

Elastic日报God_lockin 发表了文章 • 0 个评论 • 217 次浏览 • 2022-04-19 13:44 • 来自相关话题

1. 我能拿ES做数据分析和机器学习吗(需要梯子)
https://medium.com/analytics-v ... 5c250

2. 相爱相杀的云厂商和开源技术公司们(需要梯子)
https://horovits.medium.com/is ... de1c6

3. ES 的聚合详解(需要梯子)
https://medium.com/betacom/ela ... 33302

编辑:斯蒂文
归档:https://ela.st/cn-daily-all
订阅:https://ela.st/cn-daily-sub
沙龙:https://ela.st/cn-meetup

在极限网关里面使用 JavaScript 脚本来进行复杂的查询改写

资料分享medcl 发表了文章 • 1 个评论 • 145 次浏览 • 2022-04-19 11:55 • 来自相关话题

使用 JavaScript 脚本来进行复杂的查询改写


有这么一个需求:

网关里怎样对跨集群搜索进行支持的呢?我想实现: 输入的搜索请求是 lp:9200/index1/_search
这个索引在3个集群上,需要跨集群检索,也就是网关能否改成 lp:9200/cluster01:index1,cluster02,index1,cluster03:index1/_search 呢?
索引有一百多个,名称不一定是 app, 还可能多个索引一起的。

极限网关自带的过滤器 content_regex_replace 虽然可以实现字符正则替换,但是这个需求是带参数的变量替换,稍微复杂一点,没有办法直接用这个正则替换实现,有什么其他办法实现么?

使用脚本过滤器


当然有的,上面的这个需求,理论上我们只需要将其中的索引 index1 匹配之后,替换为 cluster01:index1,cluster02,index1,cluster03:index1 就行了。

答案就是使用自定义脚本来做,再复杂的业务逻辑都不是问题,都能通过自定义脚本来实现,一行脚本不行,那就两行。

使用极限网关提供的 [JavaScript](https://gateway.infinilabs.com ... cript/) 过滤器可以很灵活的实现这个功能,具体继续看。

定义过滤器


首先创建一个脚本文件,放在网关数据目录的 scripts 子目录下面,如下:

<br /> ➜ gateway ✗ tree data <br /> data<br /> └── gateway<br /> └── nodes<br /> └── c9bpg0ai4h931o4ngs3g<br /> ├── kvdb<br /> ├── queue<br /> ├── scripts<br /> │ └── index_path_rewrite.js<br /> └── stats<br />

这个脚本的内容如下:

<br /> function process(context) {<br /> var originalPath = context.Get("_ctx.request.path");<br /> var matches = originalPath.match(/\/?(.*?)\/_search/)<br /> var indexNames = [];<br /> if(matches && matches.length > 1) {<br /> indexNames = matches[1].split(",")<br /> }<br /> var resultNames = []<br /> var clusterNames = ["cluster01", "cluster02"]<br /> if(indexNames.length > 0) {<br /> for(var i=0; i<indexNames.length; i++){<br /> if(indexNames[i].length > 0) {<br /> for(var j=0; j<clusterNames.length; j++){<br /> resultNames.push(clusterNames[j]+":"+indexNames[i])<br /> }<br /> }<br /> }<br /> }<br /> <br /> if (resultNames.length>0){<br /> var newPath="/"+resultNames.join(",")+"/_search";<br /> context.Put("_ctx.request.path",newPath);<br /> }<br /> }<br />

和普通的 JavaScript 一样,定义一个特定的函数 process 来处理请求里面的上下文信息,_ctx.request.path 是网关内置上下文的一个变量,用来获取请求的路径,通过 context.Get("_ctx.request.path") 在脚本里面进行访问。

中间我们使用了 JavaScript 的正则匹配和字符处理,做了一些字符拼接,得到新的路径 newPath 变量,最后使用 context.Put("_ctx.request.path",newPath) 更新网关请求的路径信息,从而实现查询条件里面的参数替换。

有关网关内置上下文的变量列表,请访问 [Request Context](https://gateway.infinilabs.com ... ntext/)

接下来,创建一个网关配置,并使用 javascript 过滤器调用该脚本,如下:

```
entry:

  • name: my_es_entry
    enabled: true
    router: my_router
    max_concurrency: 10000
    network:
    binding: 0.0.0.0:8000

    flow:
  • name: default_flow
    filter:
  • dump:
    context:
  • _ctx.request.path
  • javascript:
    file: index_path_rewrite.js
  • dump:
    context:
  • _ctx.request.path
  • elasticsearch:
    elasticsearch: dev
    router:
  • name: my_router
    default_flow: default_flow

    elasticsearch:
  • name: dev
    enabled: true
    schema: http
    hosts:
  • 192.168.3.188:9206
    <br /> <br /> 上面的例子中,使用了一个 `javascript` 过滤器,并且指定了加载的脚本文件为 `index_path_rewrite.js`,并使用了两个 `dump` 过滤器来输出脚本运行前后的路径信息,最后再使用一个 `elasticsearch` 过滤器来转发请求给 Elasticsearch 进行查询。<br /> <br /> 我们启动网关测试一下,如下:<br /> <br />
    ➜ gateway ✗ ./bin/gateway
    ___
    /
    \ /_\ /
    \/\/ / /\ \ \/\ /_/\
    / /
    \///\ / /\/\ \ \/ \/ //\_ /
    / /\/ \/ / //_ \ /\ / \/ \
    ___/_/ \/\/ \
    / \/ \/_/ _/_/

    [GATEWAY] A light-weight, powerful and high-performance elasticsearch gateway.
    [GATEWAY] 1.0.0_SNAPSHOT, 2022-04-18 07:11:09, 2023-12-31 10:10:10, 8062c4bc6e57a3fefcce71c0628d2d4141e46953
    [04-19 11:41:29] [INF] [app.go:174] initializing gateway.
    [04-19 11:41:29] [INF] [app.go:175] using config: /Users/medcl/go/src/infini.sh/gateway/gateway.yml.
    [04-19 11:41:29] [INF] [instance.go:72] workspace: /Users/medcl/go/src/infini.sh/gateway/data/gateway/nodes/c9bpg0ai4h931o4ngs3g
    [04-19 11:41:29] [INF] [app.go:283] gateway is up and running now.
    [04-19 11:41:30] [INF] [api.go:262] api listen at: http://0.0.0.0:2900
    [04-19 11:41:30] [INF] [entry.go:312] entry [my_es_entry] listen at: http://0.0.0.0:8000
    [04-19 11:41:30] [INF] [module.go:116] all modules are started
    [04-19 11:41:30] [INF] [actions.go:349] elasticsearch [dev] is available
    <br /> <br /> 运行下面的查询来验证查询结果,如下:<br /> <br />
    curl localhost:8000/abc,efg/_search
    <br /> <br /> 可以看到网关通过 `dump` 过滤器输出的调试信息:<br /> <br />
    ---- DUMPING CONTEXT ----
    _ctx.request.path : /abc,efg/_search
    ---- DUMPING CONTEXT ----
    _ctx.request.path : /cluster01:abc,cluster02:abc,cluster01:efg,cluster02:efg/_search
    ```

    查询条件按照我们的需求进行了改写,Nice!

    重写 DSL 查询语句


    好吧,我们刚刚只是修改了查询的索引而已,那么查询请求的 DSL 呢?行不行?

    那自然是可以的嘛,瞧下面的例子:

    <br /> function process(context) {<br /> var originalDSL = context.Get("_ctx.request.body");<br /> if (originalDSL.length >0){<br /> var jsonObj=JSON.parse(originalDSL);<br /> jsonObj.size=123;<br /> jsonObj.aggs= {<br /> "test1": {<br /> "terms": {<br /> "field": "abc",<br /> "size": 10<br /> }<br /> }<br /> }<br /> context.Put("_ctx.request.body",JSON.stringify(jsonObj));<br /> }<br /> }<br />

    先是获取查询请求,然后转换成 JSON 对象,之后任意修改查询对象就行了,保存回去,搞掂。

    测试一下:
    <br /> curl -XPOST localhost:8000/abc,efg/_search -d'{"query":{}}'<br />
    输出:
    <br /> ---- DUMPING CONTEXT ---- <br /> _ctx.request.path : /abc,efg/_search<br /> _ctx.request.body : {"query":{}}<br /> [04-19 18:14:24] [INF] [reverseproxy.go:255] elasticsearch [dev] hosts: [] => [192.168.3.188:9206]<br /> ---- DUMPING CONTEXT ---- <br /> _ctx.request.path : /abc,efg/_search<br /> _ctx.request.body : {"query":{},"size":123,"aggs":{"test1":{"terms":{"field":"abc","size":10}}}}<br />

    是不是感觉解锁了新的世界?

    结论


    通过使用 Javascript 脚本过滤器,我们可以非常灵活的进行复杂逻辑的操作来满足我们的业务需求。

ES里面warmer的作用

回复

ElasticsearchCharele 发起了问题 • 1 人关注 • 0 个回复 • 258 次浏览 • 2022-04-18 15:24 • 来自相关话题

Elastic日报 第1376期 (2022-04-17)

Elastic日报cyberdak 发表了文章 • 0 个评论 • 211 次浏览 • 2022-04-18 10:53 • 来自相关话题

1.Kibana:使用定制 control 可视化简化数据展示
https://juejin.cn/post/6959746817093435423

2.kibana 定制化开发
https://www.cnblogs.com/tgzhu/p/10133094.html

3. Elasticsearch内存占用分析与管理
https://www.cyub.vip/2020/09/2 ... 2590/

编辑:cyberdak
归档:https://ela.st/cn-daily-all
订阅:https://ela.st/cn-daily-sub
沙龙:https://ela.st/cn-meetup

Elastic日报 第1375期 (2021-04-16)

Elastic日报taoxiyang 发表了文章 • 0 个评论 • 247 次浏览 • 2022-04-16 12:51 • 来自相关话题

1. 百度对Elasticsearch的性能优化
   https://cloud.baidu.com/video- ... 3D192

2. 通过Logstash将RDS MySQL数据同步至Elasticsearch
   https://help.aliyun.com/docume ... .html

3. Elasticsearch 数据迁移到OpenSearch
   https://experienceleague.adobe ... 53Dja

编辑:陶希阳
归档:https://ela.st/cn-daily-all
订阅:https://ela.st/cn-daily-sub
沙龙:https://ela.st/cn-meetup

ES脚本中有对象创建导致的性能慢

ElasticsearchOmbres 回复了问题 • 2 人关注 • 1 个回复 • 311 次浏览 • 2022-04-19 11:07 • 来自相关话题

access denied ("java.io.FilePermission" "/usr/data/es1/elasticsearch-7.2.0/elastic-certificates.p12"

ElasticsearchCharele 回复了问题 • 2 人关注 • 1 个回复 • 192 次浏览 • 2022-04-21 11:47 • 来自相关话题

Elastic日报 第1374期 (2021-04-15)

Elastic日报laoyang360 发表了文章 • 0 个评论 • 165 次浏览 • 2022-04-15 13:31 • 来自相关话题


1、使用 React 和 Elasticsearch 构建表情符号搜索应用程序的完整指南
https://blog.reactivesearch.io ... w0422

2、使用 Logstash 和 Kibana 设置基本的 ElasticSearch 管道
https://akrsh24-srivastava.med ... 1883b

3、Netflix Content Engineering 如何实现图搜索?
https://netflixtechblog.com/ho ... d7eaf

编辑:铭毅天下
归档:https://ela.st/cn-daily-all
订阅:https://ela.st/cn-daily-sub
沙龙:https://ela.st/cn-meetup

Elastic日报 第1373期 (2021-04-14)

Elastic日报Se7en 发表了文章 • 0 个评论 • 197 次浏览 • 2022-04-14 10:53 • 来自相关话题

1.Kibana:Vega 可视化入门 - 定制自己的可视化图
https://blog.csdn.net/UbuntuTo ... 64886
2.如何设计一个完美的 Elasticsearch 集群
https://thoughts.t37.net/desig ... c1a87
3.Lucene In Action 第二版电子书
https://livebook.manning.com/b ... book/

编辑:Se7en
归档:https://ela.st/cn-daily-all
订阅:https://ela.st/cn-daily-sub
沙龙:https://ela.st/cn-meetup

一个关于快照的深度问题

回复

ElasticsearchCharele 发起了问题 • 1 人关注 • 0 个回复 • 284 次浏览 • 2022-04-13 16:09 • 来自相关话题

如何做到真正的前缀搜索

Elasticsearchlaoyang360 回复了问题 • 5 人关注 • 4 个回复 • 277 次浏览 • 2022-04-17 04:46 • 来自相关话题

Elastic日报 第1372期 (2021-04-13)

Elastic日报kin122 发表了文章 • 0 个评论 • 185 次浏览 • 2022-04-13 10:08 • 来自相关话题

1. Elasticsearch:Reindex API 使用和故障排除的 3 个实践
https://elasticstack.blog.csdn ... 11632
2. 通过ELK查看mysql的数据(需要梯子)
https://medium.com/%40onurozan ... 029fd
3. ES的同义词搜索和替代方案(需要梯子)
https://medium.com/trendyol-te ... 83a6e

编辑:kin122
归档:https://ela.st/cn-daily-all
订阅:https://ela.st/cn-daily-sub
沙龙:https://ela.st/cn-meetup

es 多字段搜索,能拿到指定字段的得分吗

Elasticsearchhapjin 回复了问题 • 2 人关注 • 1 个回复 • 262 次浏览 • 2022-04-13 10:33 • 来自相关话题

Elastic日报 第1371期 (2022-04-12)

Elastic日报God_lockin 发表了文章 • 0 个评论 • 237 次浏览 • 2022-04-12 10:32 • 来自相关话题


1. 这么多ES的提供方,我该选哪个?(需要梯子)
https://medium.com/gigasearch/ ... 5e704
2. 可持续发展的ES集群设计(需要梯子)
https://medium.com/gong-tech-b ... 131d9
3. 我们在 shipt 这样做搜索(需要梯子)
https://shipt.tech/search-rele ... 6504e

编辑:斯蒂文
归档:https://ela.st/cn-daily-all
订阅:https://ela.st/cn-daily-sub
沙龙:https://ela.st/cn-meetup
 

Elastic日报 第1370期 (2022-04-11)

Elastic日报pangying 发表了文章 • 0 个评论 • 255 次浏览 • 2022-04-11 22:06 • 来自相关话题


1.AWS OpenSearch 部署 EFK 日志分析收集系统
https://blog.csdn.net/weixin_4 ... .4450

2.如何提高我的 Amazon OpenSearch Service 集群上的索引性能?
https://aws.amazon.com/cn/prem ... ance/

3.如何排查 Amazon OpenSearch Service 集群上的高 JVM 内存压力问题?
https://aws.amazon.com/cn/prem ... sure/

编辑:pangying
归档:https://ela.st/cn-daily-all
订阅:https://ela.st/cn-daily-sub
沙龙:https://ela.st/cn-meetup