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/19 20:38:12 UTC
svn commit: r1458470 - in /lucene/dev/branches/lucene_solr_4_2: ./ lucene/
lucene/core/ lucene/core/src/java/org/apache/lucene/search/
lucene/highlighter/
lucene/highlighter/src/test/org/apache/lucene/search/postingshighlight/
Author: mikemccand
Date: Tue Mar 19 19:38:12 2013
New Revision: 1458470
URL: http://svn.apache.org/r1458470
Log:
LUCENE-4828: BooleanQuery.extractTerms no longer recurses into MUST_NOT clauses
Modified:
lucene/dev/branches/lucene_solr_4_2/ (props changed)
lucene/dev/branches/lucene_solr_4_2/lucene/ (props changed)
lucene/dev/branches/lucene_solr_4_2/lucene/CHANGES.txt (contents, props changed)
lucene/dev/branches/lucene_solr_4_2/lucene/core/ (props changed)
lucene/dev/branches/lucene_solr_4_2/lucene/core/src/java/org/apache/lucene/search/BooleanQuery.java
lucene/dev/branches/lucene_solr_4_2/lucene/highlighter/ (props changed)
lucene/dev/branches/lucene_solr_4_2/lucene/highlighter/src/test/org/apache/lucene/search/postingshighlight/TestPostingsHighlighter.java
Modified: lucene/dev/branches/lucene_solr_4_2/lucene/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene_solr_4_2/lucene/CHANGES.txt?rev=1458470&r1=1458469&r2=1458470&view=diff
==============================================================================
--- lucene/dev/branches/lucene_solr_4_2/lucene/CHANGES.txt (original)
+++ lucene/dev/branches/lucene_solr_4_2/lucene/CHANGES.txt Tue Mar 19 19:38:12 2013
@@ -26,6 +26,9 @@ Bug Fixes
* LUCENE-4836: Fix SimpleRateLimiter#pause to return the actual time spent
sleeping instead of the wakeup timestamp in nano seconds. (Simon Willnauer)
+* LUCENE-4828: BooleanQuery no longer extracts terms from its MUST_NOT
+ clauses. (Mike McCandless)
+
Optimizations
* LUCENE-4819: Added Sorted[Set]DocValues.termsEnum(), and optimized the
Modified: lucene/dev/branches/lucene_solr_4_2/lucene/core/src/java/org/apache/lucene/search/BooleanQuery.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene_solr_4_2/lucene/core/src/java/org/apache/lucene/search/BooleanQuery.java?rev=1458470&r1=1458469&r2=1458470&view=diff
==============================================================================
--- lucene/dev/branches/lucene_solr_4_2/lucene/core/src/java/org/apache/lucene/search/BooleanQuery.java (original)
+++ lucene/dev/branches/lucene_solr_4_2/lucene/core/src/java/org/apache/lucene/search/BooleanQuery.java Tue Mar 19 19:38:12 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/branches/lucene_solr_4_2/lucene/highlighter/src/test/org/apache/lucene/search/postingshighlight/TestPostingsHighlighter.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene_solr_4_2/lucene/highlighter/src/test/org/apache/lucene/search/postingshighlight/TestPostingsHighlighter.java?rev=1458470&r1=1458469&r2=1458470&view=diff
==============================================================================
--- lucene/dev/branches/lucene_solr_4_2/lucene/highlighter/src/test/org/apache/lucene/search/postingshighlight/TestPostingsHighlighter.java (original)
+++ lucene/dev/branches/lucene_solr_4_2/lucene/highlighter/src/test/org/apache/lucene/search/postingshighlight/TestPostingsHighlighter.java Tue Mar 19 19:38:12 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();
+ }
}