我正在使用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);
...其中ImmutableConceptDocument
是immutables生成的类 - 否则非常直接的POJO,其属性名称为我在搜索结果的source
下看到的。
但是,当我使用上面这一行时,我没有映射源属性,我确实得到了score
,type
,index
等其他详细信息。
我错过了什么?域类是否需要具有特定的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
是枚举类型。
答案 0 :(得分:1)
正如Val在评论中指出的那样,这是因为immutables.io使生成的类'构造函数变为私有(并公开了构建器)。
我从这个类中删除了不可变并编写了一个构造函数和getter并且它有效。