gpt4 book ai didi

java - Elasticsearch |删除索引后找不到插入的文档

转载 作者:行者123 更新时间:2023-12-01 16:47:36 25 4
gpt4 key购买 nike

我编写了一个简单的测试,验证不存在重复项,如下所示:

@Test
public void testSameDataNotPushedTwice() throws Exception {
// Do some logic
// index contains es index name

// adding this line fail the test
// deleteOldData(esPersistence.getESClient(), index);
esPersistence.insert(cdrData);
esPersistence.insert(cdrData);

SearchResponse searchResponse = getDataFromElastic(esPersistence.getESClient(), index);
assertThat(searchResponse.getHits().getHits().length).isEqualTo(1);
}

如您所见,我将数据推送到 ES 并检查命中长度是否等于 1。

当删除线路在通讯网络中时,测试通过。

现在,我想确保没有来自其他测试的数据,因此我想在插入之前删除索引。 delete 方法有效,但搜索响应在插入后返回 0 个命中。

删除索引方法:

public static void deleteOldData(RestHighLevelClient client, String index) throws IOException {
GetIndexRequest request = new GetIndexRequest(index);
boolean exists = client.indices().exists(request, RequestOptions.DEFAULT);
if (exists) {
DeleteIndexRequest deleteRequest = new DeleteIndexRequest(index);
client.indices().delete(deleteRequest, RequestOptions.DEFAULT);
}
}

亮点:

  • ES 7.6.2
  • 数据存在于ES中。
  • 添加 sleep 并不能解决问题(即使是 10 秒)。
  • 调试时搜索正常(找到文档)。

底线:如何执行删除索引 --> 插入 --> 搜索并找到文档?

编辑:向 ES 和 GetSettingsRequest 添加插入:

deleteOldData(esPersistence.getESClient(), index);
esPersistence.insert(testData);

GetSettingsRequest request = new GetSettingsRequest().indices(index);
GetSettingsResponse getSettingsResponse = esPersistence.getESClient().indices().getSettings(request, RequestOptions.DEFAULT);

esPersistence.insert(testData);

enter image description here

插入方法:

public boolean insert(List<ProjectData> projDataList) {
// Relevant Lines
BulkRequest bulkRequest = prepareBulkRequests(projDataList, esConfiguration.getCdrDataIndexName());
insertBulk(bulkRequest)
}

private BulkRequest prepareBulkRequests(List<ProjectData> data, String indexName) {
BulkRequest bulkRequest = new BulkRequest();
for (ProjectData ProjectData : data) {
String json = jsonParser.parsePojo(ProjectData);

bulkRequest.add(new IndexRequest(indexName)
.id(ProjectData.getId())
.source(json, XContentType.JSON));
}

return bulkRequest;
}

private boolean insertBulk(BulkRequest bulkRequest) {
try {
BulkResponse bulkResponse = rhlClient.bulk(bulkRequest, RequestOptions.DEFAULT);

if (bulkResponse.hasFailures()) {
logger.error(buildCustomBulkFailedMessage(bulkResponse));
return false;
}

} catch (IOException e) {
logger.warn("Failed to insert csv fields. Error: {}", e.getMessage());
return false;
}

return true;
}

最佳答案

特别感谢 David Pilato(来自 ES 论坛) - 插入操作后需要刷新索引,如下所示:

client.indices().refresh(new RefreshRequest(index), RequestOptions.DEFAULT);

link .

关于java - Elasticsearch |删除索引后找不到插入的文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61745214/

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