blob: fc519b280d561a710ed1d95f7c46fa1655eb119f [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.lucene.search;
import java.util.Arrays;
import org.apache.lucene.index.Term;
import org.junit.Test;
/**
* TestExplanations subclass focusing on basic query types
*/
public class TestSimpleExplanations extends BaseExplanationTestCase {
// we focus on queries that don't rewrite to other queries.
// if we get those covered well, then the ones that rewrite should
// also be covered.
/* simple term tests */
public void testT1() throws Exception {
qtest(new TermQuery(new Term(FIELD, "w1")), new int[] { 0,1,2,3 });
}
public void testT2() throws Exception {
TermQuery termQuery = new TermQuery(new Term(FIELD, "w1"));
qtest(new BoostQuery(termQuery, 100), new int[] { 0,1,2,3 });
}
/* MatchAllDocs */
public void testMA1() throws Exception {
qtest(new MatchAllDocsQuery(), new int[] { 0,1,2,3 });
}
public void testMA2() throws Exception {
Query q=new MatchAllDocsQuery();
qtest(new BoostQuery(q, 1000), new int[] { 0,1,2,3 });
}
/* some simple phrase tests */
public void testP1() throws Exception {
PhraseQuery phraseQuery = new PhraseQuery(FIELD, "w1", "w2");
qtest(phraseQuery, new int[] { 0 });
}
public void testP2() throws Exception {
PhraseQuery phraseQuery = new PhraseQuery(FIELD, "w1", "w3");
qtest(phraseQuery, new int[] { 1,3 });
}
public void testP3() throws Exception {
PhraseQuery phraseQuery = new PhraseQuery(1, FIELD, "w1", "w2");
qtest(phraseQuery, new int[] { 0,1,2 });
}
public void testP4() throws Exception {
PhraseQuery phraseQuery = new PhraseQuery(1, FIELD, "w2", "w3");
qtest(phraseQuery, new int[] { 0,1,2,3 });
}
public void testP5() throws Exception {
PhraseQuery phraseQuery = new PhraseQuery(1, FIELD, "w3", "w2");
qtest(phraseQuery, new int[] { 1,3 });
}
public void testP6() throws Exception {
PhraseQuery phraseQuery = new PhraseQuery(2, FIELD, "w3", "w2");
qtest(phraseQuery, new int[] { 0,1,3 });
}
public void testP7() throws Exception {
PhraseQuery phraseQuery = new PhraseQuery(3, FIELD, "w3", "w2");
qtest(phraseQuery, new int[] { 0,1,2,3 });
}
/* ConstantScoreQueries */
public void testCSQ1() throws Exception {
Query q = new ConstantScoreQuery(matchTheseItems(new int[] {0,1,2,3}));
qtest(q, new int[] {0,1,2,3});
}
public void testCSQ2() throws Exception {
Query q = new ConstantScoreQuery(matchTheseItems(new int[] {1,3}));
qtest(q, new int[] {1,3});
}
public void testCSQ3() throws Exception {
Query q = new ConstantScoreQuery(matchTheseItems(new int[] {0,2}));
qtest(new BoostQuery(q, 1000), new int[] {0,2});
}
/* DisjunctionMaxQuery */
public void testDMQ1() throws Exception {
DisjunctionMaxQuery q = new DisjunctionMaxQuery(
Arrays.asList(
new TermQuery(new Term(FIELD, "w1")),
new TermQuery(new Term(FIELD, "w5"))),
0.0f);
qtest(q, new int[] { 0,1,2,3 });
}
public void testDMQ2() throws Exception {
DisjunctionMaxQuery q = new DisjunctionMaxQuery(
Arrays.asList(
new TermQuery(new Term(FIELD, "w1")),
new TermQuery(new Term(FIELD, "w5"))),
0.5f);
qtest(q, new int[] { 0,1,2,3 });
}
public void testDMQ3() throws Exception {
DisjunctionMaxQuery q = new DisjunctionMaxQuery(
Arrays.asList(
new TermQuery(new Term(FIELD, "QQ")),
new TermQuery(new Term(FIELD, "w5"))),
0.5f);
qtest(q, new int[] { 0 });
}
public void testDMQ4() throws Exception {
DisjunctionMaxQuery q = new DisjunctionMaxQuery(
Arrays.asList(
new TermQuery(new Term(FIELD, "QQ")),
new TermQuery(new Term(FIELD, "xx"))),
0.5f);
qtest(q, new int[] { 2,3 });
}
public void testDMQ5() throws Exception {
BooleanQuery.Builder booleanQuery = new BooleanQuery.Builder();
booleanQuery.add(new TermQuery(new Term(FIELD, "yy")), BooleanClause.Occur.SHOULD);
booleanQuery.add(new TermQuery(new Term(FIELD, "QQ")), BooleanClause.Occur.MUST_NOT);
DisjunctionMaxQuery q = new DisjunctionMaxQuery(
Arrays.asList(
booleanQuery.build(),
new TermQuery(new Term(FIELD, "xx"))),
0.5f);
qtest(q, new int[] { 2,3 });
}
public void testDMQ6() throws Exception {
BooleanQuery.Builder booleanQuery = new BooleanQuery.Builder();
booleanQuery.add(new TermQuery(new Term(FIELD, "yy")), BooleanClause.Occur.MUST_NOT);
booleanQuery.add(new TermQuery(new Term(FIELD, "w3")), BooleanClause.Occur.SHOULD);
DisjunctionMaxQuery q = new DisjunctionMaxQuery(
Arrays.asList(
booleanQuery.build(),
new TermQuery(new Term(FIELD, "xx"))),
0.5f);
qtest(q, new int[] { 0,1,2,3 });
}
public void testDMQ7() throws Exception {
BooleanQuery.Builder booleanQuery = new BooleanQuery.Builder();
booleanQuery.add(new TermQuery(new Term(FIELD, "yy")), BooleanClause.Occur.MUST_NOT);
booleanQuery.add(new TermQuery(new Term(FIELD, "w3")), BooleanClause.Occur.SHOULD);
DisjunctionMaxQuery q = new DisjunctionMaxQuery(
Arrays.asList(
booleanQuery.build(),
new TermQuery(new Term(FIELD, "w2"))),
0.5f);
qtest(q, new int[] { 0,1,2,3 });
}
public void testDMQ8() throws Exception {
BooleanQuery.Builder booleanQuery = new BooleanQuery.Builder();
booleanQuery.add(new TermQuery(new Term(FIELD, "yy")), BooleanClause.Occur.SHOULD);
TermQuery boostedQuery = new TermQuery(new Term(FIELD, "w5"));
booleanQuery.add(new BoostQuery(boostedQuery, 100), BooleanClause.Occur.SHOULD);
TermQuery xxBoostedQuery = new TermQuery(new Term(FIELD, "xx"));
DisjunctionMaxQuery q = new DisjunctionMaxQuery(
Arrays.asList(booleanQuery.build(), new BoostQuery(xxBoostedQuery, 100000)),
0.5f);
qtest(q, new int[] { 0,2,3 });
}
public void testDMQ9() throws Exception {
BooleanQuery.Builder booleanQuery = new BooleanQuery.Builder();
booleanQuery.add(new TermQuery(new Term(FIELD, "yy")), BooleanClause.Occur.SHOULD);
TermQuery boostedQuery = new TermQuery(new Term(FIELD, "w5"));
booleanQuery.add(new BoostQuery(boostedQuery, 100), BooleanClause.Occur.SHOULD);
TermQuery xxBoostedQuery = new TermQuery(new Term(FIELD, "xx"));
DisjunctionMaxQuery q = new DisjunctionMaxQuery(
Arrays.asList(booleanQuery.build(), new BoostQuery(xxBoostedQuery, 0)),
0.5f);
qtest(q, new int[] { 0,2,3 });
}
/* MultiPhraseQuery */
public void testMPQ1() throws Exception {
MultiPhraseQuery.Builder qb = new MultiPhraseQuery.Builder();
qb.add(ta(new String[] {"w1"}));
qb.add(ta(new String[] {"w2","w3", "xx"}));
qtest(qb.build(), new int[] { 0,1,2,3 });
}
public void testMPQ2() throws Exception {
MultiPhraseQuery.Builder qb = new MultiPhraseQuery.Builder();
qb.add(ta(new String[] {"w1"}));
qb.add(ta(new String[] {"w2","w3"}));
qtest(qb.build(), new int[] { 0,1,3 });
}
public void testMPQ3() throws Exception {
MultiPhraseQuery.Builder qb = new MultiPhraseQuery.Builder();
qb.add(ta(new String[] {"w1","xx"}));
qb.add(ta(new String[] {"w2","w3"}));
qtest(qb.build(), new int[] { 0,1,2,3 });
}
public void testMPQ4() throws Exception {
MultiPhraseQuery.Builder qb = new MultiPhraseQuery.Builder();
qb.add(ta(new String[] {"w1"}));
qb.add(ta(new String[] {"w2"}));
qtest(qb.build(), new int[] { 0 });
}
public void testMPQ5() throws Exception {
MultiPhraseQuery.Builder qb = new MultiPhraseQuery.Builder();
qb.add(ta(new String[] {"w1"}));
qb.add(ta(new String[] {"w2"}));
qb.setSlop(1);
qtest(qb.build(), new int[] { 0,1,2 });
}
public void testMPQ6() throws Exception {
MultiPhraseQuery.Builder qb = new MultiPhraseQuery.Builder();
qb.add(ta(new String[] {"w1","w3"}));
qb.add(ta(new String[] {"w2"}));
qb.setSlop(1);
qtest(qb.build(), new int[] { 0,1,2,3 });
}
/* some simple tests of boolean queries containing term queries */
public void testBQ1() throws Exception {
BooleanQuery.Builder query = new BooleanQuery.Builder();
query.add(new TermQuery(new Term(FIELD, "w1")), BooleanClause.Occur.MUST);
query.add(new TermQuery(new Term(FIELD, "w2")), BooleanClause.Occur.MUST);
qtest(query.build(), new int[] { 0,1,2,3 });
}
public void testBQ2() throws Exception {
BooleanQuery.Builder query = new BooleanQuery.Builder();
query.add(new TermQuery(new Term(FIELD, "yy")), BooleanClause.Occur.MUST);
query.add(new TermQuery(new Term(FIELD, "w3")), BooleanClause.Occur.MUST);
qtest(query.build(), new int[] { 2,3 });
}
public void testBQ3() throws Exception {
BooleanQuery.Builder query = new BooleanQuery.Builder();
query.add(new TermQuery(new Term(FIELD, "yy")), BooleanClause.Occur.SHOULD);
query.add(new TermQuery(new Term(FIELD, "w3")), BooleanClause.Occur.MUST);
qtest(query.build(), new int[] { 0,1,2,3 });
}
public void testBQ4() throws Exception {
BooleanQuery.Builder outerQuery = new BooleanQuery.Builder();
outerQuery.add(new TermQuery(new Term(FIELD, "w1")), BooleanClause.Occur.SHOULD);
BooleanQuery.Builder innerQuery = new BooleanQuery.Builder();
innerQuery.add(new TermQuery(new Term(FIELD, "xx")), BooleanClause.Occur.MUST_NOT);
innerQuery.add(new TermQuery(new Term(FIELD, "w2")), BooleanClause.Occur.SHOULD);
outerQuery.add(innerQuery.build(), BooleanClause.Occur.SHOULD);
qtest(outerQuery.build(), new int[] { 0,1,2,3 });
}
public void testBQ5() throws Exception {
BooleanQuery.Builder outerQuery = new BooleanQuery.Builder();
outerQuery.add(new TermQuery(new Term(FIELD, "w1")), BooleanClause.Occur.SHOULD);
BooleanQuery.Builder innerQuery = new BooleanQuery.Builder();
innerQuery.add(new TermQuery(new Term(FIELD, "qq")), BooleanClause.Occur.MUST);
innerQuery.add(new TermQuery(new Term(FIELD, "w2")), BooleanClause.Occur.SHOULD);
outerQuery.add(innerQuery.build(), BooleanClause.Occur.SHOULD);
qtest(outerQuery.build(), new int[] { 0,1,2,3 });
}
public void testBQ6() throws Exception {
BooleanQuery.Builder outerQuery = new BooleanQuery.Builder();
outerQuery.add(new TermQuery(new Term(FIELD, "w1")), BooleanClause.Occur.SHOULD);
BooleanQuery.Builder innerQuery = new BooleanQuery.Builder();
innerQuery.add(new TermQuery(new Term(FIELD, "qq")), BooleanClause.Occur.MUST_NOT);
innerQuery.add(new TermQuery(new Term(FIELD, "w5")), BooleanClause.Occur.SHOULD);
outerQuery.add(innerQuery.build(), BooleanClause.Occur.MUST_NOT);
qtest(outerQuery.build(), new int[] { 1,2,3 });
}
public void testBQ7() throws Exception {
BooleanQuery.Builder outerQuery = new BooleanQuery.Builder();
outerQuery.add(new TermQuery(new Term(FIELD, "w1")), BooleanClause.Occur.MUST);
BooleanQuery.Builder innerQuery = new BooleanQuery.Builder();
innerQuery.add(new TermQuery(new Term(FIELD, "qq")), BooleanClause.Occur.SHOULD);
BooleanQuery.Builder childLeft = new BooleanQuery.Builder();
childLeft.add(new TermQuery(new Term(FIELD, "xx")), BooleanClause.Occur.SHOULD);
childLeft.add(new TermQuery(new Term(FIELD, "w2")), BooleanClause.Occur.MUST_NOT);
innerQuery.add(childLeft.build(), BooleanClause.Occur.SHOULD);
BooleanQuery.Builder childRight = new BooleanQuery.Builder();
childRight.add(new TermQuery(new Term(FIELD, "w3")), BooleanClause.Occur.MUST);
childRight.add(new TermQuery(new Term(FIELD, "w4")), BooleanClause.Occur.MUST);
innerQuery.add(childRight.build(), BooleanClause.Occur.SHOULD);
outerQuery.add(innerQuery.build(), BooleanClause.Occur.MUST);
qtest(outerQuery.build(), new int[] { 0 });
}
public void testBQ8() throws Exception {
BooleanQuery.Builder outerQuery = new BooleanQuery.Builder();
outerQuery.add(new TermQuery(new Term(FIELD, "w1")), BooleanClause.Occur.MUST);
BooleanQuery.Builder innerQuery = new BooleanQuery.Builder();
innerQuery.add(new TermQuery(new Term(FIELD, "qq")), BooleanClause.Occur.SHOULD);
BooleanQuery.Builder childLeft = new BooleanQuery.Builder();
childLeft.add(new TermQuery(new Term(FIELD, "xx")), BooleanClause.Occur.SHOULD);
childLeft.add(new TermQuery(new Term(FIELD, "w2")), BooleanClause.Occur.MUST_NOT);
innerQuery.add(childLeft.build(), BooleanClause.Occur.SHOULD);
BooleanQuery.Builder childRight = new BooleanQuery.Builder();
childRight.add(new TermQuery(new Term(FIELD, "w3")), BooleanClause.Occur.MUST);
childRight.add(new TermQuery(new Term(FIELD, "w4")), BooleanClause.Occur.MUST);
innerQuery.add(childRight.build(), BooleanClause.Occur.SHOULD);
outerQuery.add(innerQuery.build(), BooleanClause.Occur.SHOULD);
qtest(outerQuery.build(), new int[] { 0,1,2,3 });
}
public void testBQ9() throws Exception {
BooleanQuery.Builder outerQuery = new BooleanQuery.Builder();
outerQuery.add(new TermQuery(new Term(FIELD, "w1")), BooleanClause.Occur.MUST);
BooleanQuery.Builder innerQuery = new BooleanQuery.Builder();
innerQuery.add(new TermQuery(new Term(FIELD, "qq")), BooleanClause.Occur.SHOULD);
BooleanQuery.Builder childLeft = new BooleanQuery.Builder();
childLeft.add(new TermQuery(new Term(FIELD, "xx")), BooleanClause.Occur.MUST_NOT);
childLeft.add(new TermQuery(new Term(FIELD, "w2")), BooleanClause.Occur.SHOULD);
innerQuery.add(childLeft.build(), BooleanClause.Occur.SHOULD);
BooleanQuery.Builder childRight = new BooleanQuery.Builder();
childRight.add(new TermQuery(new Term(FIELD, "w3")), BooleanClause.Occur.MUST);
childRight.add(new TermQuery(new Term(FIELD, "w4")), BooleanClause.Occur.MUST);
innerQuery.add(childRight.build(), BooleanClause.Occur.MUST_NOT);
outerQuery.add(innerQuery.build(), BooleanClause.Occur.SHOULD);
qtest(outerQuery.build(), new int[] { 0,1,2,3 });
}
public void testBQ10() throws Exception {
BooleanQuery.Builder outerQuery = new BooleanQuery.Builder();
outerQuery.add(new TermQuery(new Term(FIELD, "w1")), BooleanClause.Occur.MUST);
BooleanQuery.Builder innerQuery = new BooleanQuery.Builder();
innerQuery.add(new TermQuery(new Term(FIELD, "qq")), BooleanClause.Occur.SHOULD);
BooleanQuery.Builder childLeft = new BooleanQuery.Builder();
childLeft.add(new TermQuery(new Term(FIELD, "xx")), BooleanClause.Occur.MUST_NOT);
childLeft.add(new TermQuery(new Term(FIELD, "w2")), BooleanClause.Occur.SHOULD);
innerQuery.add(childLeft.build(), BooleanClause.Occur.SHOULD);
BooleanQuery.Builder childRight = new BooleanQuery.Builder();
childRight.add(new TermQuery(new Term(FIELD, "w3")), BooleanClause.Occur.MUST);
childRight.add(new TermQuery(new Term(FIELD, "w4")), BooleanClause.Occur.MUST);
innerQuery.add(childRight.build(), BooleanClause.Occur.MUST_NOT);
outerQuery.add(innerQuery.build(), BooleanClause.Occur.MUST);
qtest(outerQuery.build(), new int[] { 1 });
}
public void testBQ11() throws Exception {
BooleanQuery.Builder query = new BooleanQuery.Builder();
query.add(new TermQuery(new Term(FIELD, "w1")), BooleanClause.Occur.SHOULD);
TermQuery boostedQuery = new TermQuery(new Term(FIELD, "w1"));
query.add(new BoostQuery(boostedQuery, 1000), BooleanClause.Occur.SHOULD);
qtest(query.build(), new int[] { 0,1,2,3 });
}
public void testBQ14() throws Exception {
BooleanQuery.Builder q = new BooleanQuery.Builder();
q.add(new TermQuery(new Term(FIELD, "QQQQQ")), BooleanClause.Occur.SHOULD);
q.add(new TermQuery(new Term(FIELD, "w1")), BooleanClause.Occur.SHOULD);
qtest(q.build(), new int[] { 0,1,2,3 });
}
public void testBQ15() throws Exception {
BooleanQuery.Builder q = new BooleanQuery.Builder();
q.add(new TermQuery(new Term(FIELD, "QQQQQ")), BooleanClause.Occur.MUST_NOT);
q.add(new TermQuery(new Term(FIELD, "w1")), BooleanClause.Occur.SHOULD);
qtest(q.build(), new int[] { 0,1,2,3 });
}
public void testBQ16() throws Exception {
BooleanQuery.Builder q = new BooleanQuery.Builder();
q.add(new TermQuery(new Term(FIELD, "QQQQQ")), BooleanClause.Occur.SHOULD);
BooleanQuery.Builder booleanQuery = new BooleanQuery.Builder();
booleanQuery.add(new TermQuery(new Term(FIELD, "w1")), BooleanClause.Occur.SHOULD);
booleanQuery.add(new TermQuery(new Term(FIELD, "xx")), BooleanClause.Occur.MUST_NOT);
q.add(booleanQuery.build(), BooleanClause.Occur.SHOULD);
qtest(q.build(), new int[] { 0,1 });
}
public void testBQ17() throws Exception {
BooleanQuery.Builder q = new BooleanQuery.Builder();
q.add(new TermQuery(new Term(FIELD, "w2")), BooleanClause.Occur.SHOULD);
BooleanQuery.Builder booleanQuery = new BooleanQuery.Builder();
booleanQuery.add(new TermQuery(new Term(FIELD, "w1")), BooleanClause.Occur.SHOULD);
booleanQuery.add(new TermQuery(new Term(FIELD, "xx")), BooleanClause.Occur.MUST_NOT);
q.add(booleanQuery.build(), BooleanClause.Occur.SHOULD);
qtest(q.build(), new int[] { 0,1,2,3 });
}
public void testBQ19() throws Exception {
BooleanQuery.Builder query = new BooleanQuery.Builder();
query.add(new TermQuery(new Term(FIELD, "yy")), BooleanClause.Occur.MUST_NOT);
query.add(new TermQuery(new Term(FIELD, "w3")), BooleanClause.Occur.SHOULD);
qtest(query.build(), new int[] { 0,1 });
}
public void testBQ20() throws Exception {
BooleanQuery.Builder q = new BooleanQuery.Builder();
q.setMinimumNumberShouldMatch(2);
q.add(new TermQuery(new Term(FIELD, "QQQQQ")), BooleanClause.Occur.SHOULD);
q.add(new TermQuery(new Term(FIELD, "yy")), BooleanClause.Occur.SHOULD);
q.add(new TermQuery(new Term(FIELD, "zz")), BooleanClause.Occur.SHOULD);
q.add(new TermQuery(new Term(FIELD, "w5")), BooleanClause.Occur.SHOULD);
q.add(new TermQuery(new Term(FIELD, "w4")), BooleanClause.Occur.SHOULD);
qtest(q.build(), new int[] { 0,3 });
}
public void testBQ21() throws Exception {
BooleanQuery.Builder q = new BooleanQuery.Builder();
q.add(new TermQuery(new Term(FIELD, "yy")), BooleanClause.Occur.SHOULD);
q.add(new TermQuery(new Term(FIELD, "zz")), BooleanClause.Occur.SHOULD);
qtest(q.build(), new int[] { 1,2,3 });
}
public void testBQ23() throws Exception {
BooleanQuery.Builder query = new BooleanQuery.Builder();
query.add(new TermQuery(new Term(FIELD, "w1")), BooleanClause.Occur.FILTER);
query.add(new TermQuery(new Term(FIELD, "w2")), BooleanClause.Occur.FILTER);
qtest(query.build(), new int[] { 0,1,2,3 });
}
public void testBQ24() throws Exception {
BooleanQuery.Builder query = new BooleanQuery.Builder();
query.add(new TermQuery(new Term(FIELD, "w1")), BooleanClause.Occur.FILTER);
query.add(new TermQuery(new Term(FIELD, "w2")), BooleanClause.Occur.SHOULD);
qtest(query.build(), new int[] { 0,1,2,3 });
}
public void testBQ25() throws Exception {
BooleanQuery.Builder query = new BooleanQuery.Builder();
query.add(new TermQuery(new Term(FIELD, "w1")), BooleanClause.Occur.FILTER);
query.add(new TermQuery(new Term(FIELD, "w2")), BooleanClause.Occur.MUST);
qtest(query.build(), new int[] { 0,1,2,3 });
}
public void testBQ26() throws Exception {
BooleanQuery.Builder query = new BooleanQuery.Builder();
query.add(new TermQuery(new Term(FIELD, "w1")), BooleanClause.Occur.FILTER);
query.add(new TermQuery(new Term(FIELD, "xx")), BooleanClause.Occur.MUST_NOT);
qtest(query.build(), new int[] { 0,1 });
}
/* BQ of TQ: using alt so some fields have zero boost and some don't */
public void testMultiFieldBQ1() throws Exception {
BooleanQuery.Builder query = new BooleanQuery.Builder();
query.add(new TermQuery(new Term(FIELD, "w1")), BooleanClause.Occur.MUST);
query.add(new TermQuery(new Term(ALTFIELD, "w2")), BooleanClause.Occur.MUST);
qtest(query.build(), new int[] { 0,1,2,3 });
}
public void testMultiFieldBQ2() throws Exception {
BooleanQuery.Builder query = new BooleanQuery.Builder();
query.add(new TermQuery(new Term(FIELD, "yy")), BooleanClause.Occur.MUST);
query.add(new TermQuery(new Term(ALTFIELD, "w3")), BooleanClause.Occur.MUST);
qtest(query.build(), new int[] { 2,3 });
}
public void testMultiFieldBQ3() throws Exception {
BooleanQuery.Builder query = new BooleanQuery.Builder();
query.add(new TermQuery(new Term(FIELD, "yy")), BooleanClause.Occur.SHOULD);
query.add(new TermQuery(new Term(ALTFIELD, "w3")), BooleanClause.Occur.MUST);
qtest(query.build(), new int[] { 0,1,2,3 });
}
public void testMultiFieldBQ4() throws Exception {
BooleanQuery.Builder outerQuery = new BooleanQuery.Builder();
outerQuery.add(new TermQuery(new Term(FIELD, "w1")), BooleanClause.Occur.SHOULD);
BooleanQuery.Builder innerQuery = new BooleanQuery.Builder();
innerQuery.add(new TermQuery(new Term(FIELD, "xx")), BooleanClause.Occur.MUST_NOT);
innerQuery.add(new TermQuery(new Term(ALTFIELD, "w2")), BooleanClause.Occur.SHOULD);
outerQuery.add(innerQuery.build(), BooleanClause.Occur.SHOULD);
qtest(outerQuery.build(), new int[] { 0,1,2,3 });
}
public void testMultiFieldBQ5() throws Exception {
BooleanQuery.Builder outerQuery = new BooleanQuery.Builder();
outerQuery.add(new TermQuery(new Term(FIELD, "w1")), BooleanClause.Occur.SHOULD);
BooleanQuery.Builder innerQuery = new BooleanQuery.Builder();
innerQuery.add(new TermQuery(new Term(ALTFIELD, "qq")), BooleanClause.Occur.MUST);
innerQuery.add(new TermQuery(new Term(ALTFIELD, "w2")), BooleanClause.Occur.SHOULD);
outerQuery.add(innerQuery.build(), BooleanClause.Occur.SHOULD);
qtest(outerQuery.build(), new int[] { 0,1,2,3 });
}
public void testMultiFieldBQ6() throws Exception {
BooleanQuery.Builder outerQuery = new BooleanQuery.Builder();
outerQuery.add(new TermQuery(new Term(FIELD, "w1")), BooleanClause.Occur.SHOULD);
BooleanQuery.Builder innerQuery = new BooleanQuery.Builder();
innerQuery.add(new TermQuery(new Term(ALTFIELD, "qq")), BooleanClause.Occur.MUST_NOT);
innerQuery.add(new TermQuery(new Term(ALTFIELD, "w5")), BooleanClause.Occur.SHOULD);
outerQuery.add(innerQuery.build(), BooleanClause.Occur.MUST_NOT);
qtest(outerQuery.build(), new int[] { 1,2,3 });
}
public void testMultiFieldBQ7() throws Exception {
BooleanQuery.Builder outerQuery = new BooleanQuery.Builder();
outerQuery.add(new TermQuery(new Term(FIELD, "w1")), BooleanClause.Occur.MUST);
BooleanQuery.Builder innerQuery = new BooleanQuery.Builder();
innerQuery.add(new TermQuery(new Term(ALTFIELD, "qq")), BooleanClause.Occur.SHOULD);
BooleanQuery.Builder childLeft = new BooleanQuery.Builder();
childLeft.add(new TermQuery(new Term(ALTFIELD, "xx")), BooleanClause.Occur.SHOULD);
childLeft.add(new TermQuery(new Term(ALTFIELD, "w2")), BooleanClause.Occur.MUST_NOT);
innerQuery.add(childLeft.build(), BooleanClause.Occur.SHOULD);
BooleanQuery.Builder childRight = new BooleanQuery.Builder();
childRight.add(new TermQuery(new Term(ALTFIELD, "w3")), BooleanClause.Occur.MUST);
childRight.add(new TermQuery(new Term(ALTFIELD, "w4")), BooleanClause.Occur.MUST);
innerQuery.add(childRight.build(), BooleanClause.Occur.SHOULD);
outerQuery.add(innerQuery.build(), BooleanClause.Occur.MUST);
qtest(outerQuery.build(), new int[] { 0 });
}
public void testMultiFieldBQ8() throws Exception {
BooleanQuery.Builder outerQuery = new BooleanQuery.Builder();
outerQuery.add(new TermQuery(new Term(ALTFIELD, "w1")), BooleanClause.Occur.MUST);
BooleanQuery.Builder innerQuery = new BooleanQuery.Builder();
innerQuery.add(new TermQuery(new Term(FIELD, "qq")), BooleanClause.Occur.SHOULD);
BooleanQuery.Builder childLeft = new BooleanQuery.Builder();
childLeft.add(new TermQuery(new Term(ALTFIELD, "xx")), BooleanClause.Occur.SHOULD);
childLeft.add(new TermQuery(new Term(FIELD, "w2")), BooleanClause.Occur.MUST_NOT);
innerQuery.add(childLeft.build(), BooleanClause.Occur.SHOULD);
BooleanQuery.Builder childRight = new BooleanQuery.Builder();
childRight.add(new TermQuery(new Term(ALTFIELD, "w3")), BooleanClause.Occur.MUST);
childRight.add(new TermQuery(new Term(FIELD, "w4")), BooleanClause.Occur.MUST);
innerQuery.add(childRight.build(), BooleanClause.Occur.SHOULD);
outerQuery.add(innerQuery.build(), BooleanClause.Occur.SHOULD);
qtest(outerQuery.build(), new int[] { 0,1,2,3 });
}
public void testMultiFieldBQ9() throws Exception {
BooleanQuery.Builder outerQuery = new BooleanQuery.Builder();
outerQuery.add(new TermQuery(new Term(FIELD, "w1")), BooleanClause.Occur.MUST);
BooleanQuery.Builder innerQuery = new BooleanQuery.Builder();
innerQuery.add(new TermQuery(new Term(ALTFIELD, "qq")), BooleanClause.Occur.SHOULD);
BooleanQuery.Builder childLeft = new BooleanQuery.Builder();
childLeft.add(new TermQuery(new Term(FIELD, "xx")), BooleanClause.Occur.MUST_NOT);
childLeft.add(new TermQuery(new Term(FIELD, "w2")), BooleanClause.Occur.SHOULD);
innerQuery.add(childLeft.build(), BooleanClause.Occur.SHOULD);
BooleanQuery.Builder childRight = new BooleanQuery.Builder();
childRight.add(new TermQuery(new Term(ALTFIELD, "w3")), BooleanClause.Occur.MUST);
childRight.add(new TermQuery(new Term(FIELD, "w4")), BooleanClause.Occur.MUST);
innerQuery.add(childRight.build(), BooleanClause.Occur.MUST_NOT);
outerQuery.add(innerQuery.build(), BooleanClause.Occur.SHOULD);
qtest(outerQuery.build(), new int[] { 0,1,2,3 });
}
public void testMultiFieldBQ10() throws Exception {
BooleanQuery.Builder outerQuery = new BooleanQuery.Builder();
outerQuery.add(new TermQuery(new Term(FIELD, "w1")), BooleanClause.Occur.MUST);
BooleanQuery.Builder innerQuery = new BooleanQuery.Builder();
innerQuery.add(new TermQuery(new Term(ALTFIELD, "qq")), BooleanClause.Occur.SHOULD);
BooleanQuery.Builder childLeft = new BooleanQuery.Builder();
childLeft.add(new TermQuery(new Term(FIELD, "xx")), BooleanClause.Occur.MUST_NOT);
childLeft.add(new TermQuery(new Term(ALTFIELD, "w2")), BooleanClause.Occur.SHOULD);
innerQuery.add(childLeft.build(), BooleanClause.Occur.SHOULD);
BooleanQuery.Builder childRight = new BooleanQuery.Builder();
childRight.add(new TermQuery(new Term(ALTFIELD, "w3")), BooleanClause.Occur.MUST);
childRight.add(new TermQuery(new Term(FIELD, "w4")), BooleanClause.Occur.MUST);
innerQuery.add(childRight.build(), BooleanClause.Occur.MUST_NOT);
outerQuery.add(innerQuery.build(), BooleanClause.Occur.MUST);
qtest(outerQuery.build(), new int[] { 1 });
}
/* BQ of PQ: using alt so some fields have zero boost and some don't */
public void testMultiFieldBQofPQ1() throws Exception {
BooleanQuery.Builder query = new BooleanQuery.Builder();
PhraseQuery leftChild = new PhraseQuery(FIELD, "w1", "w2");
query.add(leftChild, BooleanClause.Occur.SHOULD);
PhraseQuery rightChild = new PhraseQuery(ALTFIELD, "w1", "w2");
query.add(rightChild, BooleanClause.Occur.SHOULD);
qtest(query.build(), new int[] { 0 });
}
public void testMultiFieldBQofPQ2() throws Exception {
BooleanQuery.Builder query = new BooleanQuery.Builder();
PhraseQuery leftChild = new PhraseQuery(FIELD, "w1", "w3");
query.add(leftChild, BooleanClause.Occur.SHOULD);
PhraseQuery rightChild = new PhraseQuery(ALTFIELD, "w1", "w3");
query.add(rightChild, BooleanClause.Occur.SHOULD);
qtest(query.build(), new int[] { 1,3 });
}
public void testMultiFieldBQofPQ3() throws Exception {
BooleanQuery.Builder query = new BooleanQuery.Builder();
PhraseQuery leftChild = new PhraseQuery(1, FIELD, "w1", "w2");
query.add(leftChild, BooleanClause.Occur.SHOULD);
PhraseQuery rightChild = new PhraseQuery(1, ALTFIELD, "w1", "w2");
query.add(rightChild, BooleanClause.Occur.SHOULD);
qtest(query.build(), new int[] { 0,1,2 });
}
public void testMultiFieldBQofPQ4() throws Exception {
BooleanQuery.Builder query = new BooleanQuery.Builder();
PhraseQuery leftChild = new PhraseQuery(1, FIELD, "w2", "w3");
query.add(leftChild, BooleanClause.Occur.SHOULD);
PhraseQuery rightChild = new PhraseQuery(1, ALTFIELD, "w2", "w3");
query.add(rightChild, BooleanClause.Occur.SHOULD);
qtest(query.build(), new int[] { 0,1,2,3 });
}
public void testMultiFieldBQofPQ5() throws Exception {
BooleanQuery.Builder query = new BooleanQuery.Builder();
PhraseQuery leftChild = new PhraseQuery(1, FIELD, "w3", "w2");
query.add(leftChild, BooleanClause.Occur.SHOULD);
PhraseQuery rightChild = new PhraseQuery(1, ALTFIELD, "w3", "w2");
query.add(rightChild, BooleanClause.Occur.SHOULD);
qtest(query.build(), new int[] { 1,3 });
}
public void testMultiFieldBQofPQ6() throws Exception {
BooleanQuery.Builder query = new BooleanQuery.Builder();
PhraseQuery leftChild = new PhraseQuery(2, FIELD, "w3", "w2");
query.add(leftChild, BooleanClause.Occur.SHOULD);
PhraseQuery rightChild = new PhraseQuery(2, ALTFIELD, "w3", "w2");
query.add(rightChild, BooleanClause.Occur.SHOULD);
qtest(query.build(), new int[] { 0,1,3 });
}
public void testMultiFieldBQofPQ7() throws Exception {
BooleanQuery.Builder query = new BooleanQuery.Builder();
PhraseQuery leftChild = new PhraseQuery(3, FIELD, "w3", "w2");
query.add(leftChild, BooleanClause.Occur.SHOULD);
PhraseQuery rightChild = new PhraseQuery(1, ALTFIELD, "w3", "w2");
query.add(rightChild, BooleanClause.Occur.SHOULD);
qtest(query.build(), new int[] { 0,1,2,3 });
}
public void testSynonymQuery() throws Exception {
SynonymQuery query = new SynonymQuery.Builder(FIELD)
.addTerm(new Term(FIELD, "w1")
).addTerm(new Term(FIELD, "w2"))
.build();
qtest(query, new int[] { 0,1,2,3 });
}
@Test
public void testEquality() {
Explanation e1 = Explanation.match(1f, "an explanation");
Explanation e2 = Explanation.match(1f, "an explanation", Explanation.match(1f, "a subexplanation"));
Explanation e25 = Explanation.match(1f, "an explanation",
Explanation.match(1f, "a subexplanation", Explanation.match(1f, "a subsubexplanation")));
Explanation e3 = Explanation.match(1f, "an explanation");
Explanation e4 = Explanation.match(2f, "an explanation");
Explanation e5 = Explanation.noMatch("an explanation");
Explanation e6 = Explanation.noMatch("an explanation", Explanation.match(1f, "a subexplanation"));
Explanation e7 = Explanation.noMatch("an explanation");
Explanation e8 = Explanation.match(1f, "another explanation");
assertEquals(e1, e3);
assertFalse(e1.equals(e2));
assertFalse(e2.equals(e25));
assertFalse(e1.equals(e4));
assertFalse(e1.equals(e5));
assertEquals(e5, e7);
assertFalse(e5.equals(e6));
assertFalse(e1.equals(e8));
assertEquals(e1.hashCode(), e3.hashCode());
assertEquals(e5.hashCode(), e7.hashCode());
}
}