0

对不起,史前史。我有非常常见的情况(在我看来)。让我们在我的架构中成像:

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

但是,还有其他选择(和更好的选择)可以做到这一点吗?

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

4

1 回答 1

0

从我的角度来看,这是要走的路。search_field没有映射,但它存在,因此访问它的方法是通过给定要执行的特定查询。

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

@Facet(fields = "name")
@Query(value = "search_field:?0")
FacetPage<Product> findByPopularityFacetOnName(String text, Pageable page);
于 2015-07-30T07:44:30.257 回答