我正在使用spring-data-mongo和spring-data-solr将文档保存在mongo存储库和solr存储库中,但是文档的结构没有什么不同-
Mongo POJO-
@Document(collection = "program")
public class ProgramMongo {
@Id
private String id;
private String title;
private String description;
@DBRef
private Board board;
}
Solr POJO-
@SolrDocument(collection = "program")
public class ProgramSolr {
@Field
private String id;
@Field
private String title;
@Field
private String description;
@Field
private String board;
}
正如您在mongo POJO中看到的那样,我将Board作为另一个对象引用,因为我在那里维护对对象的引用,而在solr POJO中,我只是将Board ID存储为字符串。
现在我有一个solr信息库,它具有这样的方法-
@Query(defaultOperator = Operator.OR, value = "title : ?0 OR description : ?0")
@Facet(fields = { "board", "standard" })
FacetPage<Program> search(String query, Pageable pageable);
从我的服务中,我正在调用该存储库并获得FacetPage结果-
FacetPage<ProgramSolr> facetPage = solrProgramRepository.search(query, pageable);
现在,我想使用上述结果返回FacetPage,因为我需要板对象。我尝试过-
solrResultPage.getContent().forEach(p -> {
ProgramMongo program = new ProgramMongo(p);
program.setBoard(boardRepository.findById(p.getBoard()).orElse(null));
programs.add(program);
});
new SolrResultPage<ProgramMongo>(programs, pageable, solrResultPage.getTotalElements(), solrResultPage.getMaxScore());
但是以这种方式,我只获得内容和分页结果,却失去了多方面的结果。有没有办法保留刻面结果。