注:這工作,但對於更多的Hibernate式的做法,看到我的其他答案
createQuery()
返回一個標準的Lucene Query。因此,合併在Lucene的兩個查詢典型的方法是用BooleanQuery:
Query query1 = qBuilder.keyword().onField("firstname").matching("John").createQuery();
Query query2 = qBuilder.keyword().onField("lastname").matching("Doe").createQuery();
BooleanQuery bq = new BooleanQuery();
//Assuming you want to require a match on both first and last names.
//If a match on either is enough, use BooleanClause.Occur.SHOULD
bq.add(new BooleanClause(query1, BooleanClause.Occur.MUST));
bq.add(new BooleanClause(query2, BooleanClause.Occur.MUST));
非常感謝。如果值「firstname」或「lastname」爲空(如果用戶只搜索「John」,而沒有提供「Doe」),那麼該怎麼辦?我們能否使用類似的查詢,而不必首先檢查空值。這是針對我們有很多可選搜索參數的場景。 – MichaelCleverly
@MichaelCleverly - 如果條款應該是可選的,只需將它們添加爲'.should'而不是'.must'。 – femtoRgon
完美 - 非常感謝。 – MichaelCleverly