3

Hibernate Search (lucene) で 2 つの異なるクエリを組み合わせる可能性はありますか? たとえば、対応する一致する値が 1 つあるはずの 2 つのフィールドで検索したい場合:

firstname - John
lastname - Doe

qBuilder.keyword().onField("firstname").matching("John").createQuery());
qBuilder.keyword().onField("lastname").matching("Doe").createQuery());

この1つのクエリから作成する方法はありますか?

4

2 に答える 2

7

注: これは機能しますが、よりHibernate風のアプローチについては、他の回答を参照してください

createQuery()標準の Lucene Queryを返します。したがって、Lucene で 2 つのクエリをマージする一般的な方法は、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));
于 2013-07-06T08:30:50.693 に答える