如何使用Java API创建和检索具有复杂类型的Elasticsearch字段?

Noe*_*Yap 0 elasticsearch

我有以下内容:

final duration = (jsonBuilder()
        .startObject()
        .field('start', new DateTime(testResult.startTime, dateTimeZone))
        .field('end', new DateTime(testResult.endTime, dateTimeZone))
        .endObject())

client.prepareIndex('builds', 'test')
        .setSource(jsonBuilder()
                .startObject()
                .field("duration", duration)
                .endObject())

SearchResponse searchResponse = client.prepareSearch('builds')
        .setQuery(boolQuery()
                .must(termQuery('_type', 'test')))
        .execute()
        .actionGet()

final source = searchResponse.hits.hits[0].source as Map<String, Object>
Run Code Online (Sandbox Code Playgroud)

如何获取的值duration.start,并duration.end从这里?

Bla*_*POP 5

试试1 ..!

    SearchHit[] searchHits = searchResponse.getHits().getHits();
    Map<String, Object> s=searchHits[0].sourceAsMap();
    Map<String, Date> duration=(Map<String, Date>) s.get("duration");
    Date start=duration.get("start");
    Date end=duration.get("end");
Run Code Online (Sandbox Code Playgroud)

试试2 ..!

    SearchHit[] searchHits = searchResponse.getHits().getHits();
    StringBuilder builder = new StringBuilder();
    int length = searchHits.length;
    builder.append("[");
    for (int i = 0; i < length; i++) {
        if (i == length - 1) {
            builder.append(searchHits[i].getSourceAsString());
        } else {
            builder.append(searchHits[i].getSourceAsString());
            builder.append(",");
        }
    }
    builder.append("]");
         String result= builder.toString();
Run Code Online (Sandbox Code Playgroud)

它将返回一个字符串,其有效的JSON数组使用JSON解析器并获取值作为普通的json进程..!