여러 개의 가능한 값 중 하나를 포함하는 인덱스 레코드와 일치해야하는 추가 기준이 필요한 곳에서 Lucene 쿼리를 결합 할 때 여러 개의 부울 쿼리 개체를 만듭니다."OR"조건의 첫 번째 그룹에 대해
:
BooleanQuery booleanQueryInner = new BooleanQuery();
Query query1 = new TermQuery(new Term("id", "<id 1>"));
Query query2 = new TermQuery(new Term("id", "<id 2>"));
Query query3 = new TermQuery(new Term("id", "<id 3>"));
Query query4 = new TermQuery(new Term("id", "<id 4>"));
booleanQueryInner.add(query1, BooleanClause.Occur.SHOULD);
booleanQueryInner.add(query2, BooleanClause.Occur.SHOULD);
booleanQueryInner.add(query3, BooleanClause.Occur.SHOULD);
booleanQueryInner.add(query4, BooleanClause.Occur.SHOULD);
지금 쿼리에 다른 조건과 결합
BooleanQuery booleanQueryOuter = new BooleanQuery();
booleanQueryOuter.add(booleanQueryInner, BooleanClause.Occur.MUST);
booleanQueryOuter.add(boolenaQueryOtherConditions, BooleanClause.Occur.MUST);
그들 중 하나 충족하는 경우 이제 인덱스 레코드 만 반환됩니다 내부 "OR"그룹의 조건과 "기타 조건"쿼리의 조건을 충족해야합니다.
이것은 A | B 집합을 반환하지 않는 것처럼 보입니다. 이것을 시도 할 때 다른 MUST 절과 일치하는 모든 레코드를 얻고 있습니다. 즉 SHOULD가 무시되고있는 것처럼 보입니다. – Kyle
잘 모르겠습니다. 하지만 당신이해야 할 일은 BooleanQuery를 중첩하는 것입니다. –
'네가 쓸데없이 ... 필요해.'-하지만 왜? –