mirror of
https://github.com/honeymoose/OpenSearch.git
synced 2025-03-03 17:39:15 +00:00
lucene 4: Upgraded MatchNoDocsQuery.
This commit is contained in:
parent
ddc3eb3415
commit
e75c732bdd
@ -19,9 +19,11 @@
|
||||
|
||||
package org.elasticsearch.common.lucene.search;
|
||||
|
||||
import org.apache.lucene.index.AtomicReaderContext;
|
||||
import org.apache.lucene.index.IndexReader;
|
||||
import org.apache.lucene.index.Term;
|
||||
import org.apache.lucene.search.*;
|
||||
import org.apache.lucene.util.Bits;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Set;
|
||||
@ -43,20 +45,6 @@ public final class MatchNoDocsQuery extends Query {
|
||||
* Weight implementation that matches no documents.
|
||||
*/
|
||||
private class MatchNoDocsWeight extends Weight {
|
||||
/**
|
||||
* The similarity implementation.
|
||||
*/
|
||||
private final Similarity similarity;
|
||||
|
||||
|
||||
/**
|
||||
* Creates a new weight that matches nothing.
|
||||
*
|
||||
* @param searcher the search to match for
|
||||
*/
|
||||
public MatchNoDocsWeight(final Searcher searcher) {
|
||||
this.similarity = searcher.getSimilarity();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
@ -69,36 +57,29 @@ public final class MatchNoDocsQuery extends Query {
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getValue() {
|
||||
public float getValueForNormalization() throws IOException {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public float sumOfSquaredWeights() {
|
||||
return 0;
|
||||
public void normalize(float norm, float topLevelBoost) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void normalize(final float queryNorm) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Scorer scorer(final IndexReader reader,
|
||||
final boolean scoreDocsInOrder,
|
||||
final boolean topScorer) throws IOException {
|
||||
public Scorer scorer(AtomicReaderContext context, boolean scoreDocsInOrder, boolean topScorer, Bits acceptDocs) throws IOException {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Explanation explain(final IndexReader reader,
|
||||
public Explanation explain(final AtomicReaderContext context,
|
||||
final int doc) {
|
||||
return new ComplexExplanation(false, 0, "MatchNoDocs matches nothing");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Weight createWeight(final Searcher searcher) {
|
||||
return new MatchNoDocsWeight(searcher);
|
||||
public Weight createWeight(IndexSearcher searcher) throws IOException {
|
||||
return new MatchNoDocsWeight();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -19,6 +19,7 @@
|
||||
|
||||
package org.elasticsearch.common.lucene.search;
|
||||
|
||||
import gnu.trove.set.hash.THashSet;
|
||||
import org.apache.lucene.index.*;
|
||||
import org.apache.lucene.search.MultiPhraseQuery;
|
||||
import org.apache.lucene.search.Query;
|
||||
@ -137,7 +138,7 @@ public class MultiPhrasePrefixQuery extends Query {
|
||||
}
|
||||
Term[] suffixTerms = termArrays.get(sizeMinus1);
|
||||
int position = positions.get(sizeMinus1);
|
||||
List<Term> terms = new ArrayList<Term>();
|
||||
Set<Term> terms = new THashSet<Term>();
|
||||
for (Term term : suffixTerms) {
|
||||
getPrefixTerms(terms, term, reader);
|
||||
if (terms.size() > maxExpansions) {
|
||||
@ -151,7 +152,9 @@ public class MultiPhrasePrefixQuery extends Query {
|
||||
return query.rewrite(reader);
|
||||
}
|
||||
|
||||
private void getPrefixTerms(List<Term> terms, final Term prefix, final IndexReader reader) throws IOException {
|
||||
private void getPrefixTerms(Set<Term> terms, final Term prefix, final IndexReader reader) throws IOException {
|
||||
// SlowCompositeReaderWrapper could be used... but this would merge all terms from each segment into one terms
|
||||
// instance, which is very expensive. Therefore I think it is better to iterate over each leaf individually.
|
||||
TermsEnum termsEnum = null;
|
||||
List<AtomicReaderContext> leaves = reader.leaves();
|
||||
for (AtomicReaderContext leaf : leaves) {
|
||||
@ -167,7 +170,7 @@ public class MultiPhrasePrefixQuery extends Query {
|
||||
}
|
||||
|
||||
for (BytesRef term = termsEnum.term(); term != null; term = termsEnum.next()) {
|
||||
if (StringHelper.startsWith(term, prefix.bytes())) {
|
||||
if (!StringHelper.startsWith(term, prefix.bytes())) {
|
||||
break;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user