在FacetPage <>

时间:2018-08-08 10:40:10

标签: java solr spring-data-solr

我正在使用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());

但是以这种方式,我只获得内容和分页结果,却失去了多方面的结果。有没有办法保留刻面结果。

0 个答案:

没有答案