如何在Elasticsearch 6.2.1版中使用Java API索引父文档和子文档

时间:2018-03-28 11:37:54

标签: elasticsearch elasticsearch-5

我无法根据下面的实现从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中已弃用类型支持。任何人都可以建议我是否以不正确的方式做任何事情。

1 个答案:

答案 0 :(得分:0)

父级和子级必须存储在相同的分片上,因此请确保呼叫setRouting使用相同的父级路由。