You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ds...@apache.org on 2020/04/28 21:32:38 UTC
[lucene-solr] branch master updated: Solr GraphTermsQParser
simplifications (#1405)
This is an automated email from the ASF dual-hosted git repository.
dsmiley pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/lucene-solr.git
The following commit(s) were added to refs/heads/master by this push:
new 2dd92fc Solr GraphTermsQParser simplifications (#1405)
2dd92fc is described below
commit 2dd92fc0521f32b60e05ad83a80a4b3f4e88e3ce
Author: David Smiley <ds...@apache.org>
AuthorDate: Tue Apr 28 17:32:27 2020 -0400
Solr GraphTermsQParser simplifications (#1405)
No WeightOrDocIdSet; no override of bulkScorer (needless)
---
.../solr/search/GraphTermsQParserPlugin.java | 96 +++++-----------------
1 file changed, 22 insertions(+), 74 deletions(-)
diff --git a/solr/core/src/java/org/apache/solr/search/GraphTermsQParserPlugin.java b/solr/core/src/java/org/apache/solr/search/GraphTermsQParserPlugin.java
index 03fcb02..c66e079 100644
--- a/solr/core/src/java/org/apache/solr/search/GraphTermsQParserPlugin.java
+++ b/solr/core/src/java/org/apache/solr/search/GraphTermsQParserPlugin.java
@@ -22,6 +22,7 @@ import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
+import java.util.stream.Collectors;
import org.apache.lucene.document.DoublePoint;
import org.apache.lucene.document.FloatPoint;
@@ -40,7 +41,6 @@ import org.apache.lucene.index.TermState;
import org.apache.lucene.index.TermStates;
import org.apache.lucene.index.Terms;
import org.apache.lucene.index.TermsEnum;
-import org.apache.lucene.search.BulkScorer;
import org.apache.lucene.search.ConstantScoreQuery;
import org.apache.lucene.search.ConstantScoreScorer;
import org.apache.lucene.search.ConstantScoreWeight;
@@ -56,7 +56,6 @@ import org.apache.lucene.search.Scorer;
import org.apache.lucene.search.Weight;
import org.apache.lucene.util.Accountable;
import org.apache.lucene.util.ArrayUtil;
-import org.apache.lucene.util.BitDocIdSet;
import org.apache.lucene.util.BytesRef;
import org.apache.lucene.util.BytesRefBuilder;
import org.apache.lucene.util.BytesRefIterator;
@@ -74,8 +73,7 @@ import org.apache.solr.schema.SchemaField;
* This allows graph traversals to skip traversing high frequency nodes which is often desirable from a performance standpoint.
*
* Syntax: {!graphTerms f=field maxDocFreq=10000}term1,term2,term3
- **/
-
+ */
public class GraphTermsQParserPlugin extends QParserPlugin {
public static final String NAME = "graphTerms";
@@ -227,17 +225,7 @@ public class GraphTermsQParserPlugin extends QParserPlugin {
@Override
public String toString(String defaultField) {
- StringBuilder builder = new StringBuilder();
- boolean first = true;
- for (Term term : this.queryTerms) {
- if (!first) {
- builder.append(',');
- }
- first = false;
- builder.append(term.toString());
- }
-
- return builder.toString();
+ return Arrays.stream(this.queryTerms).map(Term::toString).collect(Collectors.joining(","));
}
@Override
@@ -245,39 +233,32 @@ public class GraphTermsQParserPlugin extends QParserPlugin {
visitor.visitLeaf(this);
}
- private class WeightOrDocIdSet {
- final Weight weight;
- final DocIdSet set;
-
- WeightOrDocIdSet(DocIdSet bitset) {
- this.set = bitset;
- this.weight = null;
- }
- }
-
@Override
public Weight createWeight(IndexSearcher searcher, ScoreMode scoreMode, float boost) throws IOException {
- List<TermStates> finalContexts = new ArrayList();
- List<Term> finalTerms = new ArrayList();
- List<LeafReaderContext> contexts = searcher.getTopReaderContext().leaves();
- TermStates[] termStates = new TermStates[this.queryTerms.length];
- collectTermStates(searcher.getIndexReader(), contexts, termStates, this.queryTerms);
- for(int i=0; i<termStates.length; i++) {
- TermStates ts = termStates[i];
- if(ts != null && ts.docFreq() <= this.maxDocFreq) {
- finalContexts.add(ts);
- finalTerms.add(queryTerms[i]);
+ List<TermStates> finalContexts = new ArrayList<>();
+ List<Term> finalTerms = new ArrayList<>();
+ {
+ List<LeafReaderContext> contexts = searcher.getTopReaderContext().leaves();
+ TermStates[] termStates = new TermStates[this.queryTerms.length];
+ collectTermStates(searcher.getIndexReader(), contexts, termStates, this.queryTerms);
+ for(int i=0; i<termStates.length; i++) {
+ TermStates ts = termStates[i];
+ if(ts != null && ts.docFreq() <= this.maxDocFreq) {
+ finalContexts.add(ts);
+ finalTerms.add(queryTerms[i]);
+ }
}
}
return new ConstantScoreWeight(this, boost) {
- private WeightOrDocIdSet rewrite(LeafReaderContext context) throws IOException {
+ @Override
+ public Scorer scorer(LeafReaderContext context) throws IOException {
final LeafReader reader = context.reader();
Terms terms = reader.terms(field);
- if(terms == null) {
- return new WeightOrDocIdSet(new BitDocIdSet(new FixedBitSet(reader.maxDoc()), 0));
+ if (terms == null) {
+ return null;
}
TermsEnum termsEnum = terms.iterator();
PostingsEnum docs = null;
@@ -292,42 +273,9 @@ public class GraphTermsQParserPlugin extends QParserPlugin {
builder.add(docs);
}
}
- return new WeightOrDocIdSet(builder.build());
- }
-
- private Scorer scorer(DocIdSet set) throws IOException {
- if (set == null) {
- return null;
- }
- final DocIdSetIterator disi = set.iterator();
- if (disi == null) {
- return null;
- }
- return new ConstantScoreScorer(this, score(), scoreMode, disi);
- }
-
- @Override
- public BulkScorer bulkScorer(LeafReaderContext context) throws IOException {
- final WeightOrDocIdSet weightOrBitSet = rewrite(context);
- if (weightOrBitSet.weight != null) {
- return weightOrBitSet.weight.bulkScorer(context);
- } else {
- final Scorer scorer = scorer(weightOrBitSet.set);
- if (scorer == null) {
- return null;
- }
- return new DefaultBulkScorer(scorer);
- }
- }
-
- @Override
- public Scorer scorer(LeafReaderContext context) throws IOException {
- final WeightOrDocIdSet weightOrBitSet = rewrite(context);
- if (weightOrBitSet.weight != null) {
- return weightOrBitSet.weight.scorer(context);
- } else {
- return scorer(weightOrBitSet.set);
- }
+ DocIdSet docIdSet = builder.build();
+ DocIdSetIterator disi = docIdSet.iterator();
+ return disi == null ? null : new ConstantScoreScorer(this, score(), scoreMode, disi);
}
@Override