gpt4 book ai didi

elasticsearch - 使用Elastic Search,如何将包含数组的文档索引为多个文档,每个数组项一个?

转载 作者:行者123 更新时间:2023-12-03 02:19:55 25 4
gpt4 key购买 nike

假设我有一个JSON文档(在这种情况下是从packetbeat发送的),其中包含如下结构:

{
"source": "http://some/url/",
"items": [
{"name":"item1", "value":1},
{"name":"item2", "value":2}
]
}
如何使Elastic Search将这些索引作为单独的文档进行索引,以便可以像这样检索它们:
GET http://elasicsearch:9200/indexname/doc/item1
{
"source": "http://some/url/",
"item": {
"name":"item1",
"value":1
}
}
GET http://elasicsearch:9200/indexname/doc/item2
{
"source": "http://some/url/",
"item": {
"name":"item2",
"value":2
}
}

injest pipeline是否可以使用无痛方法或其他方法来实现? (也许重新编制索引?)
(数据来自 Packetbeat,它对涉及的大量数据有效,并且由相似项目的数组组成,比上例更复杂。我不使用Logstash,而是为了简单起见避免使用Logstash,但是如果有必要的话我可以添加它。显然,在发送文档之前,我可以使用编程语言对文档进行拆分,但如果可能的话,我希望在Elastic Stack中进行此操作,以最大程度地减少其他依赖性。)

最佳答案

根据elasticsearch split document ingest processor上一个问题,无法使用Elastic Search的ingest node拆分文档。
我拆分了packetbeat发送的文档,以使用Logstash及其split filter进行工作,并且配置如下所示:

input {
beats {
port => "5044"
}
}
filter {
split {
field => "[body][requests]"
target => "[body][requests]"
}
}
output {
stdout { codec => rubydebug }
}
JSON filter对解析字符串化的JSON也很有用:
filter {
json {
source => "_body"
target => "_body"
}
}
但是事实证明,在原本不需要的地方运行Logstash会占用大量内存,并且有时会因堆栈溢出而崩溃。我选择使用node.js,使用 puppeteer和chromium而不是packetbeat来收集数据,并在将 directly发送给Elastic Search之前在node.js中处理了解析和拆分。这对于我的用例来说效果很好,其中捕获的数据是来自网页的AJAX调用,但可能不适用于其他情况。

关于elasticsearch - 使用Elastic Search,如何将包含数组的文档索引为多个文档,每个数组项一个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62660293/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com