You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by tf...@apache.org on 2016/10/31 02:15:48 UTC
[2/4] lucene-solr:jira/solr-8396: Fixed issue with distributed
queries and distributed faceting
Fixed issue with distributed queries and distributed faceting
Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/c788aae1
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/c788aae1
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/c788aae1
Branch: refs/heads/jira/solr-8396
Commit: c788aae15c544fcacca68462d55770271738c51e
Parents: d3deaec
Author: Tomas Fernandez Lobbe <tf...@apache.org>
Authored: Sun Oct 23 20:43:26 2016 -0700
Committer: Tomas Fernandez Lobbe <tf...@apache.org>
Committed: Sun Oct 23 20:43:26 2016 -0700
----------------------------------------------------------------------
.../solr/handler/component/FacetComponent.java | 12 +++++++++--
.../solr/handler/component/QueryComponent.java | 21 +++++++++++++++-----
.../apache/solr/schema/DoublePointField.java | 2 +-
.../org/apache/solr/schema/FloatPointField.java | 2 +-
.../org/apache/solr/schema/IntPointField.java | 2 +-
.../org/apache/solr/schema/LongPointField.java | 2 +-
.../java/org/apache/solr/schema/PointField.java | 6 +++---
7 files changed, 33 insertions(+), 14 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c788aae1/solr/core/src/java/org/apache/solr/handler/component/FacetComponent.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/handler/component/FacetComponent.java b/solr/core/src/java/org/apache/solr/handler/component/FacetComponent.java
index 90608c0..da4283f 100644
--- a/solr/core/src/java/org/apache/solr/handler/component/FacetComponent.java
+++ b/solr/core/src/java/org/apache/solr/handler/component/FacetComponent.java
@@ -33,6 +33,7 @@ import java.util.Map.Entry;
import org.apache.commons.lang.ArrayUtils;
import org.apache.commons.lang.StringUtils;
+import org.apache.lucene.util.BytesRef;
import org.apache.lucene.util.FixedBitSet;
import org.apache.solr.common.SolrException;
import org.apache.solr.common.SolrException.ErrorCode;
@@ -47,6 +48,7 @@ import org.apache.solr.common.util.StrUtils;
import org.apache.solr.request.SimpleFacets;
import org.apache.solr.request.SolrQueryRequest;
import org.apache.solr.schema.FieldType;
+import org.apache.solr.schema.PointField;
import org.apache.solr.search.QueryParsing;
import org.apache.solr.search.SyntaxError;
import org.apache.solr.search.facet.FacetDebugInfo;
@@ -1472,7 +1474,13 @@ public class FacetComponent extends SearchComponent {
if (sfc == null) {
sfc = new ShardFacetCount();
sfc.name = name;
- sfc.indexed = ftype == null ? sfc.name : ftype.toInternal(sfc.name);
+ if (ftype == null) {
+ sfc.indexed = null;
+ } else if (ftype.isPointField()) {
+ sfc.indexed = ((PointField)ftype).toInternalByteRef(sfc.name);
+ } else {
+ sfc.indexed = new BytesRef(ftype.toInternal(sfc.name));
+ }
sfc.termNum = termNum++;
counts.put(name, sfc);
}
@@ -1548,7 +1556,7 @@ public class FacetComponent extends SearchComponent {
public static class ShardFacetCount {
public String name;
// the indexed form of the name... used for comparisons
- public String indexed;
+ public BytesRef indexed;
public long count;
public int termNum; // term number starting at 0 (used in bit arrays)
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c788aae1/solr/core/src/java/org/apache/solr/handler/component/QueryComponent.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/handler/component/QueryComponent.java b/solr/core/src/java/org/apache/solr/handler/component/QueryComponent.java
index da17ffe..1f2ac25 100644
--- a/solr/core/src/java/org/apache/solr/handler/component/QueryComponent.java
+++ b/solr/core/src/java/org/apache/solr/handler/component/QueryComponent.java
@@ -69,6 +69,7 @@ import org.apache.solr.response.ResultContext;
import org.apache.solr.response.SolrQueryResponse;
import org.apache.solr.schema.FieldType;
import org.apache.solr.schema.IndexSchema;
+import org.apache.solr.schema.PointField;
import org.apache.solr.schema.SchemaField;
import org.apache.solr.search.CursorMark;
import org.apache.solr.search.DocIterator;
@@ -337,11 +338,21 @@ public class QueryComponent extends SearchComponent
List<String> idArr = StrUtils.splitSmart(ids, ",", true);
int[] luceneIds = new int[idArr.size()];
int docs = 0;
- for (int i=0; i<idArr.size(); i++) {
- int id = searcher.getFirstMatch(
- new Term(idField.getName(), idField.getType().toInternal(idArr.get(i))));
- if (id >= 0)
- luceneIds[docs++] = id;
+ if (idField.getType().isPointField()) {
+ for (int i=0; i<idArr.size(); i++) {
+ int id = searcher.search(
+ ((PointField)idField.getType()).getExactQuery(idField, idArr.get(i)), 1).scoreDocs[0].doc;
+ if (id >= 0) {
+ luceneIds[docs++] = id;
+ }
+ }
+ } else {
+ for (int i=0; i<idArr.size(); i++) {
+ int id = searcher.getFirstMatch(
+ new Term(idField.getName(), idField.getType().toInternal(idArr.get(i))));
+ if (id >= 0)
+ luceneIds[docs++] = id;
+ }
}
DocListAndSet res = new DocListAndSet();
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c788aae1/solr/core/src/java/org/apache/solr/schema/DoublePointField.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/schema/DoublePointField.java b/solr/core/src/java/org/apache/solr/schema/DoublePointField.java
index b9f54ae..ed5fae7 100644
--- a/solr/core/src/java/org/apache/solr/schema/DoublePointField.java
+++ b/solr/core/src/java/org/apache/solr/schema/DoublePointField.java
@@ -97,7 +97,7 @@ public class DoublePointField extends PointField implements DoubleValueFieldType
}
@Override
- protected Query getExactQuery(QParser parser, SchemaField field, String externalVal) {
+ public Query getExactQuery(SchemaField field, String externalVal) {
// TODO: better handling of string->int conversion
return DoublePoint.newExactQuery(field.getName(), Double.parseDouble(externalVal));
}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c788aae1/solr/core/src/java/org/apache/solr/schema/FloatPointField.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/schema/FloatPointField.java b/solr/core/src/java/org/apache/solr/schema/FloatPointField.java
index 94a5dda..b55a037 100644
--- a/solr/core/src/java/org/apache/solr/schema/FloatPointField.java
+++ b/solr/core/src/java/org/apache/solr/schema/FloatPointField.java
@@ -97,7 +97,7 @@ public class FloatPointField extends PointField implements FloatValueFieldType {
}
@Override
- protected Query getExactQuery(QParser parser, SchemaField field, String externalVal) {
+ public Query getExactQuery(SchemaField field, String externalVal) {
return FloatPoint.newExactQuery(field.getName(), Float.parseFloat(externalVal));
}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c788aae1/solr/core/src/java/org/apache/solr/schema/IntPointField.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/schema/IntPointField.java b/solr/core/src/java/org/apache/solr/schema/IntPointField.java
index 89f40c1..b263236 100644
--- a/solr/core/src/java/org/apache/solr/schema/IntPointField.java
+++ b/solr/core/src/java/org/apache/solr/schema/IntPointField.java
@@ -108,7 +108,7 @@ public class IntPointField extends PointField implements IntValueFieldType {
}
@Override
- protected Query getExactQuery(QParser parser, SchemaField field, String externalVal) {
+ public Query getExactQuery(SchemaField field, String externalVal) {
// TODO: better handling of string->int conversion
return IntPoint.newExactQuery(field.getName(), Integer.parseInt(externalVal));
}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c788aae1/solr/core/src/java/org/apache/solr/schema/LongPointField.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/schema/LongPointField.java b/solr/core/src/java/org/apache/solr/schema/LongPointField.java
index c414ab5..73f53f1 100644
--- a/solr/core/src/java/org/apache/solr/schema/LongPointField.java
+++ b/solr/core/src/java/org/apache/solr/schema/LongPointField.java
@@ -97,7 +97,7 @@ public class LongPointField extends PointField implements LongValueFieldType {
}
@Override
- protected Query getExactQuery(QParser parser, SchemaField field, String externalVal) {
+ public Query getExactQuery(SchemaField field, String externalVal) {
return LongPoint.newExactQuery(field.getName(), Long.parseLong(externalVal));
}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c788aae1/solr/core/src/java/org/apache/solr/schema/PointField.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/schema/PointField.java b/solr/core/src/java/org/apache/solr/schema/PointField.java
index 161e0ac..31b52bd 100644
--- a/solr/core/src/java/org/apache/solr/schema/PointField.java
+++ b/solr/core/src/java/org/apache/solr/schema/PointField.java
@@ -136,11 +136,11 @@ public abstract class PointField extends PrimitiveFieldType {
// currently implemented as singleton range
return getRangeQuery(parser, field, externalVal, externalVal, true, true);
} else {
- return getExactQuery(parser, field, externalVal);
+ return getExactQuery(field, externalVal);
}
}
- protected abstract Query getExactQuery(QParser parser, SchemaField field, String externalVal);
+ public abstract Query getExactQuery(SchemaField field, String externalVal);
@Override
public String storedToReadable(IndexableField f) {
@@ -149,7 +149,7 @@ public abstract class PointField extends PrimitiveFieldType {
@Override
public String toInternal(String val) {
- return toInternalByteRef(val).utf8ToString();
+ throw new UnsupportedOperationException("Can't generate internal string in PointField. use PointField.toInternalByteRef");
}
public BytesRef toInternalByteRef(String val) {