gpt4 book ai didi

java - 如何使用elasticsearch-test将多个json记录加载到elasticsearch中

转载 作者:行者123 更新时间:2023-11-30 11:21:57 25 4
gpt4 key购买 nike

我目前正在使用 elasticsearch-test 进行单元测试(使用 junit)。我有一个 JSON 文件,该文件中的每一行都包含一条 JSON 记录。该文件类似于以下内容。

{ "id" : 1, "fname" : "john", "lname" : "doe" }
{ "id" : 2, "fname" : "john", "lname" : "smith" }
...
{ "id" : 10, "fname" : "jane", "lname" : "smith" }

我想做的是将这些数据加载到测试索引中。所以我做了类似下面的事情。

@Before
public void setup throws Exception {
this.esSetup = new EsSetup();
this.esSetup.execute(
deleteAll(),
createIndex("my_index")
.withSettings(fromClassPath("test/settings.json"))
.withMapping("data", fromClassPath("test/mapping.json"))
index("my_index", "data")
.withSource(fromClassPath("test/data.json")));
}

但是,当我测试记录(文档)的数量时,我只得到一个。

@Test
public void testCount() {
assertTrue(this.esSetup.exists("my_index"));
Long numDocs = this.esSetup.countAll();
assertEquals(10L, numDocs); //fails, numDocs = 1
}

有一个注释可以用来进行批量数据导入:@ElasticsearchBulkRequest。但是,我不太确定如何使用此注释,因为没有演示代码。在我的尝试中,无论如何我都尝试过,使用类似下面的东西。

@Test
@ElasticsearchBulkRequest(dataFile="test/data.json")
public void testCount() {
assertTrue(this.esSetup.exists("my_index"));
Long numDocs = this.esSetup.countAll();
assertEquals(10L, numDocs); //fails, numDocs = 1
}

但我得到一个异常:无法管理索引:必须定义节点名称。

所以,我的问题是,是否可以使用 elasticsearch-test 将具有多个 JSON 记录(每行 1 个 JSON 记录)的文件加载到测试索引中?

如果没有,我必须将每个 JSON 记录拆分到它自己的文件中,然后执行类似以下的操作,这似乎很愚蠢。

for(int i=0; i < 10; i++) {
this.esSetup.execute(
index("my_index","data")
.withSource(fromClassPath("test/data"+i+".json"))
);
}

最佳答案

类 com.github.tlrx.elasticsearch.test.EsSetupTest 展示了如何批量加载数据。我遇到的问题是我保存 JSON 记录的文件没有指定索引命令。

例如,我的 JSON 数据文件如下所示。

{ "id" : 1, "fname" : "john", "lname" : "doe" }
{ "id" : 2, "fname" : "john", "lname" : "smith" }
...
{ "id" : 10, "fname" : "jane", "lname" : "smith" }

但是,在每条记录之前,应该有一个索引命令。类似下面的内容。

{ "index" : { "_index" : "my_index", "_type" : "data", "_id" : "1" } }
{ "id" : 1, "fname" : "john", "lname" : "doe" }
{ "index" : { "_index" : "my_index", "_type" : "data", "_id" : "2" } }
{ "id" : 2, "fname" : "john", "lname" : "smith" }
...
{ "index" : { "_index" : "my_index", "_type" : "data", "_id" : "10" } }
{ "id" : 10, "fname" : "jane", "lname" : "smith" }

JSON 数据的批量加载显示在资源文件夹中:src/test/resources/com/github/tlrx/elasticsearch/test/data/products.json。

关于java - 如何使用elasticsearch-test将多个json记录加载到elasticsearch中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21995411/

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