1 回答

TA貢獻(xiàn)1815條經(jīng)驗(yàn) 獲得超6個(gè)贊
首先,索引類別的id:
@Entity
@Indexed
public class Product {
private long id;
@Field
private String title;
@IndexedEmbedded
private Category category;
}
@Entity
public class Category {
@Field // Added this
private long id;
@Field
private String name;
}
然后,確保重新索引您的數(shù)據(jù),例如使用質(zhì)量索引器。
然后,如下所述更改您的查詢代碼。
您首先需要“SQL IN”,它在 Lucene 世界中表示為category.id = <first> OR category.id = <second> OR .... 只有布爾運(yùn)算符與您可能習(xí)慣的有所不同(請(qǐng)參見(jiàn)此處);在您的情況下,您希望“至少一個(gè)”子句匹配,因此您必須使用should運(yùn)算符:
List<Long> categoryIds = ...; // Provided by the user
BooleanJunction<?> categoryIdJunction = queryBuilder.bool();
for ( categoryId : categoryIds ) {
categoryIdJunction.should(
queryBuilder
.keyword()
.onField("category.id")
.matching(categoryId)
.createQuery();
);
}
org.apache.lucene.search.Query categoryIdQuery = categoryIdJunction.createQuery();
最后,您需要將該查詢與標(biāo)題上的其他查詢結(jié)合起來(lái)。為此,使用另一個(gè)布爾連接,這次使用must運(yùn)算符(所有子句必須匹配):
org.apache.lucene.search.Query titleQuery = queryBuilder
.keyword()
.onField("title")
.matching(queryString)
.createQuery();
org.apache.lucene.search.Query luceneQuery = queryBuilder.bool()
.must( categoryIdQuery )
.must( titleQuery )
.createQuery();
添加回答
舉報(bào)