映射'可忽略的' solr中的字段用于Spring Data

时间:2015-07-02 09:18:27

标签: java spring solr spring-data spring-data-solr

对于很长的史前时代抱歉。我有很常见的情况(在我看来)。让我在我的架构中成像:

<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);

但是,还有其他选择(以及更好的选择)吗?

对不起我的英文,任何更正 - 欢迎!

1 个答案:

答案 0 :(得分:0)

从我的观点来看,这是要走的路。 search_field未映射,但它存在,因此通过给定要执行的特定查询来访问它的方式。

除此之外,您的方法需要注释如下,以使其结果基于search_field搜索和名称上的方面:

@Facet(fields = "name")
@Query(value = "search_field:?0")
FacetPage<Product> findByPopularityFacetOnName(String text, Pageable page);