我无法根据下面的实现从ES检索父/子文档。
第1步:关系
{
"versionjoin": {
"properties": {
"my_join_field": {
"type": "join",
"relations": {
"version": "accountversion"
}
}
}
}
}
第2步:这就是我索引父文档的方式。
{
String pattern = YYYY_MM_DD_HH_MM_SS;
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
String date = simpleDateFormat.format(index_timestamp);
JSONObject obj = new JSONObject();
JSONObject joinObject = new JSONObject();
obj.put(VERSIONNUMBER, versionNumber);
obj.put(VERSIONDATE, date);
obj.put("my_join_field","version");
client.prepareIndex(
versionIndexName,
versionJoinType)
.setId(versionNumber)
.setSource(obj.toString(),XContentType.JSON)
.execute()
.actionGet();
}
第3步:这就是我尝试索引子文档的方式。
JsonNode node = serializeMapper.readTree(json);
ObjectNode addedNode = ((ObjectNode) node).putObject("my_join_field");
addedNode
.put("name", "accountversion")
.put("parent", association.getVersion());
String modifiedJson = serializeMapper.writeValueAsString(addedNode);
indexResponse = client.prepareIndex(versionIndexName, versionJoinType)
.setId(String.valueOf(association.getId() + ":" +
association.getVersion()))
.setRouting(association.getVersion())
.setSource(modifiedJson,XContentType.JSON).get();
当我尝试使用文档ID和路由检索文档时,我在结果中看不到任何文档。我最近将ES从2.4迁移到6.2,并且我将上述实现更改为从同一索引读取父文档和子文档。由于ES 6.2中已弃用类型支持。任何人都可以建议我是否以不正确的方式做任何事情。
答案 0 :(得分:0)
父级和子级必须存储在相同的分片上,因此请确保呼叫setRouting
使用相同的父级路由。