You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by mi...@apache.org on 2013/03/13 19:22:04 UTC
svn commit: r1456074 - in /lucene/dev/trunk/lucene: CHANGES.txt
core/src/java/org/apache/lucene/search/BooleanQuery.java
highlighter/src/test/org/apache/lucene/search/postingshighlight/TestPostingsHighlighter.java
Author: mikemccand
Date: Wed Mar 13 18:22:03 2013
New Revision: 1456074
URL: http://svn.apache.org/r1456074
Log:
LUCENE-4828: BooleanQuery.extractTerms no longer includes terms from MUST_NOT clauses
Modified:
lucene/dev/trunk/lucene/CHANGES.txt
lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/search/BooleanQuery.java
lucene/dev/trunk/lucene/highlighter/src/test/org/apache/lucene/search/postingshighlight/TestPostingsHighlighter.java
Modified: lucene/dev/trunk/lucene/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/CHANGES.txt?rev=1456074&r1=1456073&r2=1456074&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/CHANGES.txt (original)
+++ lucene/dev/trunk/lucene/CHANGES.txt Wed Mar 13 18:22:03 2013
@@ -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
Modified: lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/search/BooleanQuery.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/search/BooleanQuery.java?rev=1456074&r1=1456073&r2=1456074&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/search/BooleanQuery.java (original)
+++ lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/search/BooleanQuery.java Wed Mar 13 18:22:03 2013
@@ -446,9 +446,11 @@ public class BooleanQuery extends Query
// 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")
Modified: lucene/dev/trunk/lucene/highlighter/src/test/org/apache/lucene/search/postingshighlight/TestPostingsHighlighter.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/highlighter/src/test/org/apache/lucene/search/postingshighlight/TestPostingsHighlighter.java?rev=1456074&r1=1456073&r2=1456074&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/highlighter/src/test/org/apache/lucene/search/postingshighlight/TestPostingsHighlighter.java (original)
+++ lucene/dev/trunk/lucene/highlighter/src/test/org/apache/lucene/search/postingshighlight/TestPostingsHighlighter.java Wed Mar 13 18:22:03 2013
@@ -406,4 +406,32 @@ public class TestPostingsHighlighter ext
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();
+ }
}