如何使用 SolrCrudRepository 实现布尔搜索

问题描述

我有一个带有 Spring Data 和 SolrCrudRepository 的 Spring Boot 应用程序。我的第一步是创建存储库方法,例如

    public Page<SolrDoc> findByTitle(String term,Pageable pageable);
    public Page<SolrDoc> findBySubject(String term,Pageable pageable);
    public Page<SolrDoc> findByType(String term,Pageable pageable);

哪个工作正常。 solr 日志按预期报告简单的查询

path=/select params={q=title:"train"&start=0&sort=id+desc&rows=5&wt=javabin&version=2} hits=32 status=0

但是,如果我在查询中传递布尔运算符(例如 AND 或 OR),则不会得到预期的结果,并且会记录查询

params={q=title:"train+OR+locomotive"&start=0&sort=id+desc&rows=5&wt=javabin&version=2} hits=32 status=0

问题显然是,认情况下,Spring Boot Solr 将搜索词评估为字符串,并在该字段中搜索该字符串,而不是我真正想要的,例如

q=title:train+OR+title:locomotive

我知道如何使用 solr api 编写这样的查询,但是有没有一种简单的方法可以在 SolrCrudRepository 中构造一个方法来做到这一点?

是否有一个简单的开箱即用的方法调用可以完成布尔搜索,或者我是否需要解析布尔术语的搜索字符串并编写自定义查询

解决方法

在扩展 SolrCrudRepository 时覆盖的方法是灵活的,但为了利用 solr api 的全部功能,您需要利用 SolrTemplate,如其他地方所述here