You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by cp...@apache.org on 2017/05/04 17:10:29 UTC
[35/50] lucene-solr:jira/solr-8668: SOLR-1485: improve TokenStream
API usage
SOLR-1485: improve TokenStream API usage
Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/5d42177b
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/5d42177b
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/5d42177b
Branch: refs/heads/jira/solr-8668
Commit: 5d42177b9290b61c658154e42223408944cd4bc1
Parents: 0be8e17
Author: Erik Hatcher <eh...@apache.org>
Authored: Tue May 2 19:41:06 2017 -0400
Committer: Erik Hatcher <eh...@apache.org>
Committed: Tue May 2 19:41:24 2017 -0400
----------------------------------------------------------------------
.../solr/search/PayloadCheckQParserPlugin.java | 8 ++++-
.../solr/search/PayloadScoreQParserPlugin.java | 9 ++++-
.../java/org/apache/solr/util/PayloadUtils.java | 38 +++++++++-----------
3 files changed, 32 insertions(+), 23 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/5d42177b/solr/core/src/java/org/apache/solr/search/PayloadCheckQParserPlugin.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/search/PayloadCheckQParserPlugin.java b/solr/core/src/java/org/apache/solr/search/PayloadCheckQParserPlugin.java
index 83090bf..e5702bf 100644
--- a/solr/core/src/java/org/apache/solr/search/PayloadCheckQParserPlugin.java
+++ b/solr/core/src/java/org/apache/solr/search/PayloadCheckQParserPlugin.java
@@ -17,6 +17,7 @@
package org.apache.solr.search;
+import java.io.IOException;
import java.lang.invoke.MethodHandles;
import java.util.ArrayList;
import java.util.List;
@@ -67,7 +68,12 @@ public class PayloadCheckQParserPlugin extends QParserPlugin {
FieldType ft = req.getCore().getLatestSchema().getFieldType(field);
Analyzer analyzer = ft.getQueryAnalyzer();
- SpanQuery query = PayloadUtils.createSpanQuery(field, value, analyzer);
+ SpanQuery query = null;
+ try {
+ query = PayloadUtils.createSpanQuery(field, value, analyzer);
+ } catch (IOException e) {
+ throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, e);
+ }
if (query == null) {
throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, "SpanQuery is null");
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/5d42177b/solr/core/src/java/org/apache/solr/search/PayloadScoreQParserPlugin.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/search/PayloadScoreQParserPlugin.java b/solr/core/src/java/org/apache/solr/search/PayloadScoreQParserPlugin.java
index f9dd896..4098e09 100644
--- a/solr/core/src/java/org/apache/solr/search/PayloadScoreQParserPlugin.java
+++ b/solr/core/src/java/org/apache/solr/search/PayloadScoreQParserPlugin.java
@@ -17,6 +17,8 @@
package org.apache.solr.search;
+import java.io.IOException;
+
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.queries.payloads.PayloadFunction;
import org.apache.lucene.queries.payloads.PayloadScoreQuery;
@@ -61,7 +63,12 @@ public class PayloadScoreQParserPlugin extends QParserPlugin {
FieldType ft = req.getCore().getLatestSchema().getFieldType(field);
Analyzer analyzer = ft.getQueryAnalyzer();
- SpanQuery query = PayloadUtils.createSpanQuery(field, value, analyzer);
+ SpanQuery query = null;
+ try {
+ query = PayloadUtils.createSpanQuery(field, value, analyzer);
+ } catch (IOException e) {
+ throw new SolrException(SolrException.ErrorCode.BAD_REQUEST,e);
+ }
if (query == null) {
throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, "SpanQuery is null");
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/5d42177b/solr/core/src/java/org/apache/solr/util/PayloadUtils.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/util/PayloadUtils.java b/solr/core/src/java/org/apache/solr/util/PayloadUtils.java
index 32e2fd9..6fe8a61 100644
--- a/solr/core/src/java/org/apache/solr/util/PayloadUtils.java
+++ b/solr/core/src/java/org/apache/solr/util/PayloadUtils.java
@@ -38,7 +38,6 @@ import org.apache.lucene.search.spans.SpanQuery;
import org.apache.lucene.search.spans.SpanTermQuery;
import org.apache.lucene.util.BytesRef;
import org.apache.solr.analysis.TokenizerChain;
-import org.apache.solr.common.SolrException;
import org.apache.solr.schema.FieldType;
public class PayloadUtils {
@@ -100,34 +99,31 @@ public class PayloadUtils {
return payloadFunction;
}
- public static SpanQuery createSpanQuery(String field, String value, Analyzer analyzer) {
- SpanQuery query;
- try {
- // adapted this from QueryBuilder.createSpanQuery (which isn't currently public) and added reset(), end(), and close() calls
- TokenStream in = analyzer.tokenStream(field, value);
+ /**
+ * The generated SpanQuery will be either a SpanTermQuery or an ordered, zero slop SpanNearQuery, depending
+ * on how many tokens are emitted.
+ */
+ public static SpanQuery createSpanQuery(String field, String value, Analyzer analyzer) throws IOException {
+ // adapted this from QueryBuilder.createSpanQuery (which isn't currently public) and added reset(), end(), and close() calls
+ List<SpanTermQuery> terms = new ArrayList<>();
+ try (TokenStream in = analyzer.tokenStream(field, value)) {
in.reset();
TermToBytesRefAttribute termAtt = in.getAttribute(TermToBytesRefAttribute.class);
-
- List<SpanTermQuery> terms = new ArrayList<>();
while (in.incrementToken()) {
terms.add(new SpanTermQuery(new Term(field, termAtt.getBytesRef())));
}
in.end();
- in.close();
-
- if (terms.isEmpty()) {
- query = null;
- } else if (terms.size() == 1) {
- query = terms.get(0);
- } else {
- query = new SpanNearQuery(terms.toArray(new SpanTermQuery[terms.size()]), 0, true);
- }
- } catch (IOException e) {
- throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, e);
+ }
+
+ SpanQuery query;
+ if (terms.isEmpty()) {
+ query = null;
+ } else if (terms.size() == 1) {
+ query = terms.get(0);
+ } else {
+ query = new SpanNearQuery(terms.toArray(new SpanTermQuery[terms.size()]), 0, true);
}
return query;
}
-
-
}