这个问题来自this SO thread。
由于看起来我有一个相似但不相同的查询,最好有一个单独的问题让其他人受益,正如@Val建议的那样。
所以,与上面类似,我需要在索引中插入大量数据(我的初始测试大约是10 000个文档,但这仅适用于POC,还有更多)。我想插入的数据是在.json文档中,看起来像这样(片段):
import { Component, OnInit, Inject, PLATFORM_ID };
import { isPlatformBrowser } from '@angular/common';
....
@Component({
export class MyComponent implements OnInit {
constructor(@Inject(PLATFORM_ID) private: platformId: Object){}
ngOnInit() {
if(isPlatformBrowser(this.platformId)){
//do something
}
}
}
)}
我自己承认我是ElasticSearch的新手,但是,通过阅读文档,我的假设是我可以获取.json文件并从其中的数据创建索引。我现在已经了解到,json中的每个项目都需要有一个“标题”,例如:
[ { "fileName": "filename", "data":"massive string text data here" },
{ "fileName": "filename2", "data":"massive string text data here" } ]
意思是,这不是实际的json格式(如此),而是操纵字符串。
我想知道是否有一种{"index":{}}
{ "fileName": "filename", "data":"massive string text data here" }
我的json数据的方式(以json格式),而不必先手动操作文本(因为我的测试数据有10 000个条目,我'我相信你能明白为什么我不想手动这样做。
有任何建议或建议的自动化工具可以帮助解决这个问题吗?
PS - 我正在使用Windows安装程序和Postman进行通话。
答案 0 :(得分:1)
您可以使用单个shell命令轻松转换文件。如果您的文件名为input.json
,则可以执行以下操作:
jq -c -r ".[]" input.json | while read line; do echo '{"index":{}}'; echo $line; done > bulk.json
在此之后,您将拥有一个名为bulk.json
的文件,该文件格式正确,可以发送到批量端点。
然后您可以像这样调用批量端点:
curl -XPOST localhost:9200/your_index/your_type/_bulk -H "Content-Type: application/x-ndjson" --data-binary @bulk.json
注意:如果您还没有install jq
,则需要先{{3}}。
答案 1 :(得分:0)
这是我将数据批量发送到 es 的代码
DB::table('order_detail')->insert([
"ort_ord_id" => $orderId,
"ort_amount" => $value->price,
"ort_total" => $value->discounted * $value->quantity,
"ort_discount" => ($value->price * $value->quantity) - $value->discounted * $value->quantity,
"ort_type" => "product",
"ort_number" => $value->quantity,
"ort_reference_id" => $value->id,
( ( ($request->city)=="98" ) ? ($cartPrice>=300000) ? ( ( ($request->province)=="8" ) ? "ort_free_delivery" == "City sending free delivery" ) )
( ( ($request->city)!="98" ) ? ($cartPrice>=300000) ? ( ( ($request->province)!="8" ) ? "ort_free_delivery" == "Country sending free delivery" : "ort_free_delivery" == "" ) )
"created_at" => now(),
"updated_at" => now()
]);
或者你可以使用诸如 elasticdump 或 elasticsearch-tools 之类的库