问题描述
我有一个带有 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。