对于很长的史前时代抱歉。我有很常见的情况(在我看来)。让我在我的架构中成像:
<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);
但是,还有其他选择(以及更好的选择)吗?
对不起我的英文,任何更正 - 欢迎!
答案 0 :(得分:0)
从我的观点来看,这是要走的路。 search_field
未映射,但它存在,因此通过给定要执行的特定查询来访问它的方式。
除此之外,您的方法需要注释如下,以使其结果基于search_field
搜索和名称上的方面:
@Facet(fields = "name")
@Query(value = "search_field:?0")
FacetPage<Product> findByPopularityFacetOnName(String text, Pageable page);