mirror of https://github.com/apache/lucene.git
LUCENE-4828: BooleanQuery.extractTerms no longer includes terms from MUST_NOT clauses
git-svn-id: https://svn.apache.org/repos/asf/lucene/dev/trunk@1456074 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
c04f1ba800
commit
c476a59ff9
|
@ -80,6 +80,9 @@ Bug Fixes
|
|||
codecs. The special case of a null context ClassLoader is now also
|
||||
supported. (Christian Kohlschütter, Uwe Schindler)
|
||||
|
||||
* LUCENE-4828: BooleanQuery no longer extracts terms from its MUST_NOT
|
||||
clauses. (Mike McCandless)
|
||||
|
||||
======================= Lucene 4.2.0 =======================
|
||||
|
||||
Changes in backwards compatibility policy
|
||||
|
|
|
@ -446,9 +446,11 @@ public class BooleanQuery extends Query implements Iterable<BooleanClause> {
|
|||
// inherit javadoc
|
||||
@Override
|
||||
public void extractTerms(Set<Term> terms) {
|
||||
for (BooleanClause clause : clauses) {
|
||||
clause.getQuery().extractTerms(terms);
|
||||
}
|
||||
for (BooleanClause clause : clauses) {
|
||||
if (clause.getOccur() != Occur.MUST_NOT) {
|
||||
clause.getQuery().extractTerms(terms);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override @SuppressWarnings("unchecked")
|
||||
|
|
|
@ -406,4 +406,32 @@ public class TestPostingsHighlighter extends LuceneTestCase {
|
|||
ir.close();
|
||||
dir.close();
|
||||
}
|
||||
|
||||
public void testBooleanMustNot() throws Exception {
|
||||
Directory dir = newDirectory();
|
||||
Analyzer analyzer = new MockAnalyzer(random(), MockTokenizer.SIMPLE, true);
|
||||
RandomIndexWriter iw = new RandomIndexWriter(random(), dir, analyzer);
|
||||
FieldType positionsType = new FieldType(TextField.TYPE_STORED);
|
||||
positionsType.setIndexOptions(IndexOptions.DOCS_AND_FREQS_AND_POSITIONS_AND_OFFSETS);
|
||||
Field body = new Field("body", "This sentence has both terms. This sentence has only terms.", positionsType);
|
||||
Document document = new Document();
|
||||
document.add(body);
|
||||
iw.addDocument(document);
|
||||
IndexReader ir = iw.getReader();
|
||||
iw.close();
|
||||
IndexSearcher searcher = newSearcher(ir);
|
||||
BooleanQuery query = new BooleanQuery();
|
||||
query.add(new TermQuery(new Term("body", "terms")), BooleanClause.Occur.SHOULD);
|
||||
BooleanQuery query2 = new BooleanQuery();
|
||||
query.add(query2, BooleanClause.Occur.SHOULD);
|
||||
query2.add(new TermQuery(new Term("body", "both")), BooleanClause.Occur.MUST_NOT);
|
||||
TopDocs topDocs = searcher.search(query, 10);
|
||||
assertEquals(1, topDocs.totalHits);
|
||||
PostingsHighlighter highlighter = new PostingsHighlighter(Integer.MAX_VALUE-1);
|
||||
String snippets[] = highlighter.highlight("body", query, searcher, topDocs, 2);
|
||||
assertEquals(1, snippets.length);
|
||||
assertFalse(snippets[0].contains("<b>both</b>"));
|
||||
ir.close();
|
||||
dir.close();
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue