我有以下实体定义。
public class Order {
@Id
@DocumentId
private Long id;
@Field
@IndexedEmbedded(includePaths = {"name"})
@OneToOne
@JoinColumn(name = "ACCOUNT_ID")
private Account account;
// the rest are omitted for brevity purpose
}
public class Account {
@Id
@DocumentId
private Long id;
@SortableField(forField = "name_Sort")
@Field(name = "name_Sort", store = Store.YES, normalizer= @Normalizer(definition = SearchConstants.LOWER_CASE_NORMALIZER))
@Column(name = "NAME")
private String name;
}
如果我在Order上搜索并希望按帐户名称对搜索结果进行排序,是否有可能使用嵌入的索引注释来实现?我知道我们可以通过在Order中添加一个名为accountName的额外字符串字段,然后在其顶部添加排序注释来做到这一点。是否可以不通过在Order中指定排序注释而仅使用Account中已经定义的排序注释来实现?
答案 0 :(得分:1)
更改此:
@IndexedEmbedded(includePaths = {"name"})
对此:
@IndexedEmbedded(includePaths = {"name", "name_Sort"})
然后,您可以使用字段account.name_Sort
进行订单排序:
QueryBuilder builder = fullTextSession.getSearchFactory()
.buildQueryBuilder().forEntity( Order.class ).get();
Query luceneQuery = /* ... */;
FullTextQuery query = s.createFullTextQuery( luceneQuery, Order.class );
query.setSort(
builder.sort().byField("account.name_Sort").createSort()
);
List results = query.list();