You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ji...@apache.org on 2018/12/04 14:53:16 UTC
lucene-solr:branch_7_6: LUCENE-8589: Fix MultiPhraseQuery to not
duplicate terms when building the phrase's weight
Repository: lucene-solr
Updated Branches:
refs/heads/branch_7_6 14bc64d51 -> d764aa222
LUCENE-8589: Fix MultiPhraseQuery to not duplicate terms when building the phrase's weight
Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/d764aa22
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/d764aa22
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/d764aa22
Branch: refs/heads/branch_7_6
Commit: d764aa2223b229f6522037b6997d642ba031c79c
Parents: 14bc64d
Author: Jim Ferenczi <ji...@apache.org>
Authored: Tue Dec 4 15:38:18 2018 +0100
Committer: Jim Ferenczi <ji...@apache.org>
Committed: Tue Dec 4 15:40:57 2018 +0100
----------------------------------------------------------------------
lucene/CHANGES.txt | 3 ++
.../apache/lucene/search/MultiPhraseQuery.java | 1 -
.../lucene/search/TestMultiPhraseQuery.java | 50 +++++++++++++++++++-
3 files changed, 52 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/d764aa22/lucene/CHANGES.txt
----------------------------------------------------------------------
diff --git a/lucene/CHANGES.txt b/lucene/CHANGES.txt
index d5b7f6f..2ceb0c6 100644
--- a/lucene/CHANGES.txt
+++ b/lucene/CHANGES.txt
@@ -49,6 +49,9 @@ Bug fixes
* LUCENE-8586: Intervals.or() could get stuck in an infinite loop on certain indexes
(Alan Woodward)
+* LUCENE-8589: Fix MultiPhraseQuery to not duplicate terms when building the phrase's weight.
+ (Jim Ferenczi)
+
New Features
* LUCENE-8496: Selective indexing - modify BKDReader/BKDWriter to allow users
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/d764aa22/lucene/core/src/java/org/apache/lucene/search/MultiPhraseQuery.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/java/org/apache/lucene/search/MultiPhraseQuery.java b/lucene/core/src/java/org/apache/lucene/search/MultiPhraseQuery.java
index fa48a2d..0a88358 100644
--- a/lucene/core/src/java/org/apache/lucene/search/MultiPhraseQuery.java
+++ b/lucene/core/src/java/org/apache/lucene/search/MultiPhraseQuery.java
@@ -226,7 +226,6 @@ public class MultiPhraseQuery extends Query {
allTermStats.add(termStatistics);
}
}
- allTermStats.add(searcher.termStatistics(term, ts));
}
}
if (allTermStats.isEmpty()) {
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/d764aa22/lucene/core/src/test/org/apache/lucene/search/TestMultiPhraseQuery.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/test/org/apache/lucene/search/TestMultiPhraseQuery.java b/lucene/core/src/test/org/apache/lucene/search/TestMultiPhraseQuery.java
index 409299f..38181ac 100644
--- a/lucene/core/src/test/org/apache/lucene/search/TestMultiPhraseQuery.java
+++ b/lucene/core/src/test/org/apache/lucene/search/TestMultiPhraseQuery.java
@@ -18,7 +18,10 @@ package org.apache.lucene.search;
import java.io.IOException;
+import java.util.Arrays;
+import java.util.HashSet;
import java.util.LinkedList;
+import java.util.Set;
import org.apache.lucene.analysis.CannedTokenStream;
import org.apache.lucene.analysis.Token;
@@ -26,13 +29,16 @@ import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.document.TextField;
import org.apache.lucene.index.DirectoryReader;
+import org.apache.lucene.index.FieldInvertState;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
+import org.apache.lucene.index.LeafReaderContext;
import org.apache.lucene.index.MultiFields;
import org.apache.lucene.index.RandomIndexWriter;
import org.apache.lucene.index.Term;
import org.apache.lucene.index.TermsEnum;
+import org.apache.lucene.search.similarities.Similarity;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.RAMDirectory;
import org.apache.lucene.util.BytesRef;
@@ -101,7 +107,7 @@ public class TestMultiPhraseQuery extends LuceneTestCase {
termsWithPrefix.clear();
prefix = "blue";
te.seekCeil(new BytesRef(prefix));
-
+
do {
if (te.term().utf8ToString().startsWith(prefix)) {
termsWithPrefix.add(new Term("body", te.term().utf8ToString()));
@@ -139,6 +145,48 @@ public class TestMultiPhraseQuery extends LuceneTestCase {
indexStore.close();
}
+ public void testStats() throws IOException {
+ Directory indexStore = newDirectory();
+ RandomIndexWriter writer = new RandomIndexWriter(random(), indexStore);
+ add("quick brown fox", writer);
+ add("quick pink fox", writer);
+ add("quick red fox", writer);
+ IndexReader reader = writer.getReader();
+ IndexSearcher searcher = newSearcher(reader);
+ final Similarity delegate = searcher.getSimilarity(true);
+ final Set<String> termSet = new HashSet<>();
+ termSet.addAll(Arrays.asList("quick", "brown", "black", "red", "fox"));
+ searcher.setSimilarity(new Similarity() {
+ @Override
+ public long computeNorm(FieldInvertState state) {
+ return delegate.computeNorm(state);
+ }
+
+ @Override
+ public SimWeight computeWeight(float boost, CollectionStatistics collectionStats, TermStatistics... termStats) {
+ for (TermStatistics term : termStats) {
+ assertTrue(termSet.remove(term.term().utf8ToString()));
+ }
+ return delegate.computeWeight(boost, collectionStats, termStats);
+ }
+
+ @Override
+ public SimScorer simScorer(SimWeight weight, LeafReaderContext context) throws IOException {
+ return delegate.simScorer(weight, context);
+ }
+ });
+ MultiPhraseQuery.Builder builder = new MultiPhraseQuery.Builder();
+ builder.add(new Term("body", "quick"));
+ builder.add(new Term[] {new Term("body", "brown"), new Term("body", "red"), new Term("body", "black") });
+ builder.add(new Term("body", "fox"));
+ TopDocs topDocs = searcher.search(searcher.rewrite(builder.build()), 10);
+ assertTrue(termSet.isEmpty());
+ assertEquals(topDocs.totalHits, 2);
+ writer.close();
+ reader.close();
+ indexStore.close();
+ }
+
// LUCENE-2580
public void testTall() throws IOException {
Directory indexStore = newDirectory();