You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by eh...@apache.org on 2017/05/02 23:42:33 UTC

lucene-solr:branch_6x: SOLR-1485: improve TokenStream API usage

Repository: lucene-solr
Updated Branches:
  refs/heads/branch_6x 61c4dfb4a -> d496d1726


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/d496d172
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/d496d172
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/d496d172

Branch: refs/heads/branch_6x
Commit: d496d17269f6acdc77fa06549ae3b4d91a05c321
Parents: 61c4dfb
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:42:17 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/d496d172/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/d496d172/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/d496d172/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;
   }
-
-
 }