如何将Jest SearchResult命中投射到域对象

时间:2017-01-11 03:21:31

标签: java elasticsearch jest

我正在使用Jest来查询Elasticsearch,到目前为止它一直很棒。 Jest's documentation说:

  

可以将结果强制转换为域对象列表;

...并显示了这个例子:

SearchResult result = client.execute(search);
List<SearchResult.Hit<Article, Void>> hits = searchResult.getHits(Article.class);
// or
List<Article> articles = result.getSourceAsObjectList(Article.class);

getSourceAsObjectList已被弃用,我正在使用:

List<SearchResult.Hit<ImmutableConceptDocument, Void>> concepts = result.getHits(ImmutableConceptDocument.class);

...其中ImmutableConceptDocumentimmutables生成的类 - 否则非常直接的POJO,其属性名称为我在搜索结果的source下看到的。

但是,当我使用上面这一行时,我没有映射源属性,我确实得到了scoretypeindex等其他详细信息。

我错过了什么?域类是否需要具有特定的Jest注释或类似的东西?

我也无法在单元测试中看到任何好的例子。 This one映射到Object.class并且没有向我显示映射示例。

这是不可变的类:

@Value.Immutable
public abstract class EsConceptDocument {
    public abstract String term();
    public abstract Category type();
    public abstract List<String> synonyms();
}

...其中Category是枚举类型。

1 个答案:

答案 0 :(得分:1)

正如Val在评论中指出的那样,这是因为immutables.io使生成的类'构造函数变为私有(并公开了构建器)。

我从这个类中删除了不可变并编写了一个构造函数和getter并且它有效。