对不起,史前史。我有非常常见的情况(在我看来)。让我们在我的架构中成像:
<field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" />
<field name="title" type="text_general" indexed="true" stored="true" multiValued="false"/>
<field name="description" type="text_general" indexed="true" stored="false" multiValued="false"/>
.....
<field name="search_field" type="text_general" indexed="true" stored="false" multiValued="true"/>
<copyField source="title" dest="search_field"/>
<copyField source="..." dest="search_field"/>
<copyField source="description" dest="search_field"/>
一般来说,我只想在search_field
现场进行搜索。但我没有将此字段发送到客户端/从服务器发送到客户端。
我知道如何使用 SolrJ 进行此操作,但目前我想从使用 Spring Data Solr 中获得所有好处。
所以我声明类如下:
public class Product {
@Field private String id;
@Field private String title;
@Field private String description;
}
简单的存储库,如:
public interface SolrRepository extends SolrCrudRepository<Product, String> {
Page<Product> findByTitle(String title, Pageable page);
}
效果很好。但。我想写方法:
Page<Product> findBySearchField(String text, Pageable page);
但这当然行不通。
我认为这应该有效:
@Query(value = "search_field:?0")
FacetPage<Product> findByPopularityFacetOnName(String text, Pageable page);
但是,还有其他选择(和更好的选择)可以做到这一点吗?
对不起我的英语,任何更正 - 欢迎!