gpt4 book ai didi

java - 使用 Elasticsearch 的 java api 如何在索引期间映射文档 ID

转载 作者:行者123 更新时间:2023-12-01 04:27:31 28 4
gpt4 key购买 nike

我正在将数据索引到 ElasticSearch 引擎服务器。我有一个名为 User 的域对象。下面是我正在使用的相关代码。现在,elasticsearch 中的 _id 属性被设置为该命令的增量值,如下所示:

bulkRequest.add(client.prepareIndex("heros", "entry", i+"")

但我不希望任意 id 递增,因为神奇女侠也会有一个 SN_NO 作为她文档的 id。如何将此域对象的唯一ID(SN_NO)映射到elasticsearch引擎中的_id?我想要这个的原因是,随着时间的推移,我可能必须改变她的属性之一,例如腰围尺寸。我不希望包含 2 个神奇女侠的 Elasticsearch 引擎,一个腰细,另一个腰胖,作为一个愚蠢的例子。

抱歉问了这么长的问题,我努力让它读起来有趣。

提前谢谢您!

公共(public)类 TestBulkElastic {

public static void main(String [] args) throws JsonGenerationException, JsonMappingException, IOException {

// Create User object
User user1 = new User();
user1.setGender(Gender.FEMALE);
Name n = new Name();
n.setFirst("Wonder");
n.setLast("Woman");
user1.setName(n);
user1.setVerified(false);
ObjectMapper mapper = new ObjectMapper();
mapper.writeValue(new File("user.json"), user1);

HashMap<String,Object> fileResult =
new ObjectMapper().readValue(new File("user.json"), HashMap.class);

Settings settings = ImmutableSettings.settingsBuilder()
.put("cluster.name", "MyES").build();

Client client = new TransportClient(settings)
.addTransportAddress(new InetSocketTransportAddress("123.123.123.123", 9350));

BulkRequestBuilder bulkRequest = client.prepareBulk();
int batch = 10000;
int i = 0 ;

while(i < 10000000){
bulkRequest.add(client.prepareIndex("heros", "entry", i+"")
.setSource(fileResult));

if(i%batch == 0){
bulkRequest.execute().actionGet();
bulkRequest = null;
bulkRequest = client.prepareBulk();
}

i++;

}
}

}

最佳答案

您可以在类型的映射中执行此操作。设置_id字段的路径,指向要用作_id的字段

{
"YourType": {
"dynamic": "true",
"_id": {
"path": "new_id"
},
"_timestamp": {
"enabled": true,
"store": true
},
"properties": {
"new_id": {
"type": "string",
"fields": {
"raw": {
"index": "not_analyzed",
"type": "string"
}
}
}
}
}

}

关于java - 使用 Elasticsearch 的 java api 如何在索引期间映射文档 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18389694/

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