【发布时间】:2013-08-25 17:30:47
【问题描述】:
我正在将数据索引到 ElasticSearch 引擎服务器。我有一个名为 User 的域对象。
下面是我正在使用的相关代码。现在,elasticsearch 中的_id 属性设置为该命令的增量值,如下所示:
bulkRequest.add(client.prepareIndex("heros", "entry", i+"")
但我不希望任意增加一个 id,因为 Wonder Woman 也会有一个 SN_NO 作为她的文档的 id。如何将此域对象的唯一 ID (SN_NO) 映射到弹性搜索引擎中的_id?我想要这个的原因是,我可能不得不随着时间的推移更改她的一个属性,例如腰围尺寸。而且我不希望弹性搜索引擎包含 2 个神奇女侠,一个腰细,一个胖子作为愚蠢的例子。
抱歉这个问题太长了,我努力让它读起来很有趣。
提前谢谢你!
公共类 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++;
}
}
}
【问题讨论】:
-
请正确缩进你的代码,这样真的很难读...
-
谢谢。我已经修复了缩进。只要您拥有库,此代码就应该可以正确编译:用户类是任意的,它包含一个名为 Name 的嵌套类,因此我可以尝试使用嵌套的 json。感谢您提供的任何帮助。
-
我已经多次阅读您的问题并且很难理解它(尽管我没有使用 Java elasticsearch 插件)。
SN_NO是什么?我在您的代码中看不到它... -
为什么不删除
i+""代码而使用SN_NO+""代替?我错过了什么吗? -
我只是提供 SN_NO 作为示例。假设 SN_NO 是每个 User、Super Woman、Bat Man 等的唯一标识符。每个人都必须有一个 SN_NO(社会安全号码)。
标签: java elasticsearch elasticsearch-plugin