You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@usergrid.apache.org by sf...@apache.org on 2015/11/06 19:14:42 UTC

[1/2] usergrid git commit: add distance field

Repository: usergrid
Updated Branches:
  refs/heads/USERGRID-926 [created] 5cc0b3807


add distance field


Project: http://git-wip-us.apache.org/repos/asf/usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/usergrid/commit/a9da97df
Tree: http://git-wip-us.apache.org/repos/asf/usergrid/tree/a9da97df
Diff: http://git-wip-us.apache.org/repos/asf/usergrid/diff/a9da97df

Branch: refs/heads/USERGRID-926
Commit: a9da97df7669caea605529e83943a9846aea3f40
Parents: a7b6a9c
Author: Shawn Feldman <sf...@apache.org>
Authored: Fri Nov 6 11:10:45 2015 -0700
Committer: Shawn Feldman <sf...@apache.org>
Committed: Fri Nov 6 11:10:45 2015 -0700

----------------------------------------------------------------------
 .../read/search/CandidateEntityFilter.java      |  6 +++
 .../org/apache/usergrid/persistence/GeoIT.java  | 42 ++++++++++++++++++++
 .../model/entity/EntityToMapConverter.java      |  8 +++-
 .../persistence/model/field/DistanceField.java  | 42 ++++++++++++++++++++
 .../persistence/model/field/FieldTypeName.java  |  3 +-
 .../persistence/index/GeoCandidateResult.java   | 40 +++++++++++++++++++
 .../index/impl/EsEntityIndexImpl.java           |  7 ++--
 .../persistence/index/impl/IndexingUtils.java   | 39 +++++++++++++-----
 8 files changed, 172 insertions(+), 15 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/usergrid/blob/a9da97df/stack/core/src/main/java/org/apache/usergrid/corepersistence/pipeline/read/search/CandidateEntityFilter.java
----------------------------------------------------------------------
diff --git a/stack/core/src/main/java/org/apache/usergrid/corepersistence/pipeline/read/search/CandidateEntityFilter.java b/stack/core/src/main/java/org/apache/usergrid/corepersistence/pipeline/read/search/CandidateEntityFilter.java
index 9a9636f..449639c 100644
--- a/stack/core/src/main/java/org/apache/usergrid/corepersistence/pipeline/read/search/CandidateEntityFilter.java
+++ b/stack/core/src/main/java/org/apache/usergrid/corepersistence/pipeline/read/search/CandidateEntityFilter.java
@@ -25,6 +25,8 @@ import java.util.*;
 import org.apache.usergrid.corepersistence.index.IndexLocationStrategyFactory;
 import org.apache.usergrid.persistence.index.*;
 import org.apache.usergrid.persistence.index.impl.IndexProducer;
+import org.apache.usergrid.persistence.model.field.DistanceField;
+import org.apache.usergrid.persistence.model.field.DoubleField;
 import org.apache.usergrid.persistence.model.field.Field;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -197,6 +199,7 @@ public class CandidateEntityFilter extends AbstractFilter<FilterResult<Candidate
 
             final Candidate candidate = filterResult.getValue();
             final CandidateResult candidateResult = candidate.getCandidateResult();
+            final boolean isGeo = candidateResult instanceof GeoCandidateResult;
             final SearchEdge searchEdge = candidate.getSearchEdge();
             final Id candidateId = candidateResult.getId();
             final UUID candidateVersion = candidateResult.getVersion();
@@ -252,6 +255,9 @@ public class CandidateEntityFilter extends AbstractFilter<FilterResult<Candidate
             //they're the same add it
 
             final Entity returnEntity = entity.getEntity().get();
+            if(isGeo){
+                returnEntity.setField(new DistanceField(((GeoCandidateResult)candidateResult).getDistance()));
+            }
 
             final Optional<EdgePath> parent = filterResult.getPath();
 

http://git-wip-us.apache.org/repos/asf/usergrid/blob/a9da97df/stack/core/src/test/java/org/apache/usergrid/persistence/GeoIT.java
----------------------------------------------------------------------
diff --git a/stack/core/src/test/java/org/apache/usergrid/persistence/GeoIT.java b/stack/core/src/test/java/org/apache/usergrid/persistence/GeoIT.java
index 230f9be..fcc4c32 100644
--- a/stack/core/src/test/java/org/apache/usergrid/persistence/GeoIT.java
+++ b/stack/core/src/test/java/org/apache/usergrid/persistence/GeoIT.java
@@ -161,6 +161,48 @@ public class GeoIT extends AbstractCoreIT {
         em.delete(user);
     }
 
+
+    /**
+     * Validate the ability to query a moving entity
+     * 1. Create an entity with location
+     * 2. Query from a point near the entity's location
+     * 3. Move the entity farther away from the center point
+     * 4. Run the same query again to verify the entity is no longer in the area
+     */
+    @Test
+    public void validateDistanceQueryExists() throws Exception {
+        LOG.info("GeoIT.testMovingTarget");
+        //Get the EntityManager instance
+        EntityManager em = app.getEntityManager();
+        assertNotNull(em);
+
+        //1. Create an entity with location
+        Map<String, Object> properties = new LinkedHashMap<String, Object>() {{
+            put("username", "edanuff");
+            put("email", "ed@anuff.com");
+            put("location", new LinkedHashMap<String, Object>() {{
+                put("latitude", 37.776753);
+                put("longitude", -122.407846);
+            }});
+        }};
+        Entity user = em.create("user", properties);
+        assertNotNull(user);
+        app.refreshIndex();
+
+        final double lat = 37.776753;
+        final double lon = -122.407846;
+        //2. Query from a point near the entity's location
+        Query query = Query.fromQL("select * where location within 100 of "
+            + lat + "," + lon);
+        Results listResults = em.searchCollection(em.getApplicationRef(), "users", query);
+        assertEquals(1, listResults.size());
+        Entity entity = listResults.getEntity();
+        assertTrue(entity.getMetadata("distance")!=null);
+        assertTrue(Double.parseDouble( entity.getMetadata("distance").toString())>0);
+
+        em.delete(user);
+    }
+
     /**
      * Validate the ability to query connections within proximity of the users
      * 1. Create an entity with location

http://git-wip-us.apache.org/repos/asf/usergrid/blob/a9da97df/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/entity/EntityToMapConverter.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/entity/EntityToMapConverter.java b/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/entity/EntityToMapConverter.java
index b9f637a..dd7a916 100644
--- a/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/entity/EntityToMapConverter.java
+++ b/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/entity/EntityToMapConverter.java
@@ -57,8 +57,14 @@ public class EntityToMapConverter {
     }
 
     private EntityMap toMap( EntityObject entity, EntityMap entityMap ) {
+
         for ( Field field : entity.getFields() ) {
-            if ( field instanceof ListField || field instanceof ArrayField  || field instanceof SetField) {
+            if( field instanceof DistanceField){
+                if(!entityMap.containsKey("metadata"))entityMap.put("metadata",new HashMap<String,Object>());
+                DistanceField distanceField = (DistanceField) field;
+                Map<String,Object> metaMap = (Map) entityMap.get("metadata");
+                metaMap.put(DistanceField.NAME, distanceField.getValue());
+            }else if ( field instanceof ListField || field instanceof ArrayField  || field instanceof SetField) {
                 Collection list = ( Collection ) field.getValue();
                 entityMap.put( field.getName(), processCollection( list )  );
             }

http://git-wip-us.apache.org/repos/asf/usergrid/blob/a9da97df/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/field/DistanceField.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/field/DistanceField.java b/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/field/DistanceField.java
new file mode 100644
index 0000000..4e9e1e1
--- /dev/null
+++ b/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/field/DistanceField.java
@@ -0,0 +1,42 @@
+/*
+ *
+ *  * Licensed to the Apache Software Foundation (ASF) under one or more
+ *  *  contributor license agreements.  The ASF licenses this file to You
+ *  * under the Apache License, Version 2.0 (the "License"); you may not
+ *  * use this file except in compliance with the License.
+ *  * You may obtain a copy of the License at
+ *  *
+ *  *     http://www.apache.org/licenses/LICENSE-2.0
+ *  *
+ *  * Unless required by applicable law or agreed to in writing, software
+ *  * distributed under the License is distributed on an "AS IS" BASIS,
+ *  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  * See the License for the specific language governing permissions and
+ *  * limitations under the License.  For additional information regarding
+ *  * copyright in this work, please see the NOTICE file in the top level
+ *  * directory of this distribution.
+ *
+ */
+package org.apache.usergrid.persistence.model.field;
+
+/**
+ * Classy class class.
+ */
+public class DistanceField extends DoubleField {
+    public static final String NAME = "distance";
+    public DistanceField( Double value) {
+        super(NAME, value);
+    }
+
+    public DistanceField( Double value, boolean unique) {
+        super(NAME, value, unique);
+    }
+
+    public DistanceField() {
+        super();
+    }
+    @Override
+    public FieldTypeName getTypeName() {
+        return FieldTypeName.DISTANCE;
+    }
+}

http://git-wip-us.apache.org/repos/asf/usergrid/blob/a9da97df/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/field/FieldTypeName.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/field/FieldTypeName.java b/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/field/FieldTypeName.java
index 90f3879..8b0cdc3 100644
--- a/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/field/FieldTypeName.java
+++ b/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/field/FieldTypeName.java
@@ -39,5 +39,6 @@ public enum FieldTypeName {
     LONG,
     SET,
     STRING,
-    UUID
+    UUID,
+    DISTANCE
 }

http://git-wip-us.apache.org/repos/asf/usergrid/blob/a9da97df/stack/corepersistence/queryindex/src/main/java/org/apache/usergrid/persistence/index/GeoCandidateResult.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/queryindex/src/main/java/org/apache/usergrid/persistence/index/GeoCandidateResult.java b/stack/corepersistence/queryindex/src/main/java/org/apache/usergrid/persistence/index/GeoCandidateResult.java
new file mode 100644
index 0000000..07ef41c
--- /dev/null
+++ b/stack/corepersistence/queryindex/src/main/java/org/apache/usergrid/persistence/index/GeoCandidateResult.java
@@ -0,0 +1,40 @@
+/*
+ *
+ *  * Licensed to the Apache Software Foundation (ASF) under one or more
+ *  *  contributor license agreements.  The ASF licenses this file to You
+ *  * under the Apache License, Version 2.0 (the "License"); you may not
+ *  * use this file except in compliance with the License.
+ *  * You may obtain a copy of the License at
+ *  *
+ *  *     http://www.apache.org/licenses/LICENSE-2.0
+ *  *
+ *  * Unless required by applicable law or agreed to in writing, software
+ *  * distributed under the License is distributed on an "AS IS" BASIS,
+ *  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  * See the License for the specific language governing permissions and
+ *  * limitations under the License.  For additional information regarding
+ *  * copyright in this work, please see the NOTICE file in the top level
+ *  * directory of this distribution.
+ *
+ */
+package org.apache.usergrid.persistence.index;
+
+import org.apache.usergrid.persistence.model.entity.Id;
+
+import java.util.UUID;
+
+/**
+ * Classy class class.
+ */
+public class GeoCandidateResult extends CandidateResult {
+    private final double distance;
+
+    public GeoCandidateResult(Id entityId, UUID entityVersion, String docId, double distance) {
+        super(entityId, entityVersion, docId);
+        this.distance = distance;
+    }
+
+    public double getDistance() {
+        return distance;
+    }
+}

http://git-wip-us.apache.org/repos/asf/usergrid/blob/a9da97df/stack/corepersistence/queryindex/src/main/java/org/apache/usergrid/persistence/index/impl/EsEntityIndexImpl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/queryindex/src/main/java/org/apache/usergrid/persistence/index/impl/EsEntityIndexImpl.java b/stack/corepersistence/queryindex/src/main/java/org/apache/usergrid/persistence/index/impl/EsEntityIndexImpl.java
index f03a98a..b32a11c 100644
--- a/stack/corepersistence/queryindex/src/main/java/org/apache/usergrid/persistence/index/impl/EsEntityIndexImpl.java
+++ b/stack/corepersistence/queryindex/src/main/java/org/apache/usergrid/persistence/index/impl/EsEntityIndexImpl.java
@@ -668,11 +668,12 @@ public class EsEntityIndexImpl implements EntityIndex,VersionedData {
         logger.debug( "   Hit count: {} Total hits: {}", hits.length, searchHits.getTotalHits() );
 
         List<CandidateResult> candidates = new ArrayList<>( hits.length );
+        final boolean isGeo = query.getOriginalQuery().contains("location") && query.getOriginalQuery().contains("within");
 
         for ( SearchHit hit : hits ) {
+            CandidateResult candidateResult;
 
-            final CandidateResult candidateResult = parseIndexDocId( hit.getId() );
-
+            candidateResult =  parseIndexDocId( hit, isGeo );
             candidates.add( candidateResult );
         }
 
@@ -696,7 +697,7 @@ public class EsEntityIndexImpl implements EntityIndex,VersionedData {
 
         for ( SearchHit hit : hits ) {
 
-            final CandidateResult candidateResult = parseIndexDocId( hit.getId() );
+            final CandidateResult candidateResult = parseIndexDocId( hit );
 
             // if comparing against the latestVersion, make sure we only add the candidateResult if it's
             // older than or equal to the latest marked version

http://git-wip-us.apache.org/repos/asf/usergrid/blob/a9da97df/stack/corepersistence/queryindex/src/main/java/org/apache/usergrid/persistence/index/impl/IndexingUtils.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/queryindex/src/main/java/org/apache/usergrid/persistence/index/impl/IndexingUtils.java b/stack/corepersistence/queryindex/src/main/java/org/apache/usergrid/persistence/index/impl/IndexingUtils.java
index 18cb928..88da04e 100644
--- a/stack/corepersistence/queryindex/src/main/java/org/apache/usergrid/persistence/index/impl/IndexingUtils.java
+++ b/stack/corepersistence/queryindex/src/main/java/org/apache/usergrid/persistence/index/impl/IndexingUtils.java
@@ -24,6 +24,7 @@ import java.util.regex.Pattern;
 
 import org.apache.usergrid.persistence.core.scope.ApplicationScope;
 import org.apache.usergrid.persistence.index.CandidateResult;
+import org.apache.usergrid.persistence.index.GeoCandidateResult;
 import org.apache.usergrid.persistence.index.IndexEdge;
 import org.apache.usergrid.persistence.index.SearchEdge;
 import org.apache.usergrid.persistence.model.entity.Entity;
@@ -31,6 +32,7 @@ import org.apache.usergrid.persistence.model.entity.Id;
 import org.apache.usergrid.persistence.model.entity.SimpleId;
 
 import com.google.common.base.Preconditions;
+import org.elasticsearch.search.SearchHit;
 
 
 public class IndexingUtils {
@@ -220,28 +222,45 @@ public class IndexingUtils {
         builder.append( type ).append( "(" ).append( value ).append( ")" );
     }
 
-
     /**
      * Parse the document id into a candidate result
      */
-    public static CandidateResult parseIndexDocId( final String documentId ) {
+    public static CandidateResult parseIndexDocId( final SearchHit hit ) {
+        return parseIndexDocId(hit.getId());
+    }
+
+    public static CandidateResult parseIndexDocId( final SearchHit hit, boolean isGeo ) {
 
+        final String documentId = hit.getId();
+        final double distance = isGeo ? (double) hit.sortValues()[0] : -1;
+        return parseIndexDocId(documentId,distance);
+    }
+
+    public static CandidateResult parseIndexDocId( final String documentId ) {
+        return parseIndexDocId(documentId,-1);
+    }
+        /**
+         * Parse the document id into a candidate result
+         */
+    public static CandidateResult parseIndexDocId( final String documentId, final double distance ) {
 
-        final Matcher matcher = DOCUMENT_PATTERN.matcher( documentId );
+        final Matcher matcher = DOCUMENT_PATTERN.matcher(documentId);
 
-        Preconditions.checkArgument( matcher.matches(), "Pattern for document id did not match expected format" );
-        Preconditions.checkArgument( matcher.groupCount() == 9, "9 groups expected in the pattern" );
+        Preconditions.checkArgument(matcher.matches(), "Pattern for document id did not match expected format");
+        Preconditions.checkArgument(matcher.groupCount() == 9, "9 groups expected in the pattern");
 
         //Other fields can be parsed using groups.  The groups start at value 1, group 0 is the entire match
-        final String entityUUID = matcher.group( 3 );
-        final String entityType = matcher.group( 4 );
+        final String entityUUID = matcher.group(3);
+        final String entityType = matcher.group(4);
 
-        final String versionUUID = matcher.group( 5 );
+        final String versionUUID = matcher.group(5);
 
 
-        Id entityId = new SimpleId( UUID.fromString( entityUUID ), entityType );
+        Id entityId = new SimpleId(UUID.fromString(entityUUID), entityType);
 
-        return new CandidateResult( entityId, UUID.fromString( versionUUID ), documentId );
+        return distance>0
+            ? new GeoCandidateResult(entityId, UUID.fromString(versionUUID), documentId, distance)
+            : new CandidateResult(entityId, UUID.fromString(versionUUID), documentId);
     }
 
 


[2/2] usergrid git commit: add distance field

Posted by sf...@apache.org.
add distance field


Project: http://git-wip-us.apache.org/repos/asf/usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/usergrid/commit/5cc0b380
Tree: http://git-wip-us.apache.org/repos/asf/usergrid/tree/5cc0b380
Diff: http://git-wip-us.apache.org/repos/asf/usergrid/diff/5cc0b380

Branch: refs/heads/USERGRID-926
Commit: 5cc0b38072654546c292f3f78843e319924e99f4
Parents: a9da97d
Author: Shawn Feldman <sf...@apache.org>
Authored: Fri Nov 6 11:14:28 2015 -0700
Committer: Shawn Feldman <sf...@apache.org>
Committed: Fri Nov 6 11:14:28 2015 -0700

----------------------------------------------------------------------
 .../usergrid/persistence/model/entity/EntityToMapConverter.java | 1 +
 .../apache/usergrid/persistence/model/field/DistanceField.java  | 2 +-
 .../apache/usergrid/persistence/index/GeoCandidateResult.java   | 2 +-
 .../usergrid/persistence/index/impl/EsEntityIndexImpl.java      | 5 +++--
 .../apache/usergrid/persistence/index/impl/IndexingUtils.java   | 4 +---
 .../apache/usergrid/persistence/index/query/ParsedQuery.java    | 4 ++++
 6 files changed, 11 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/usergrid/blob/5cc0b380/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/entity/EntityToMapConverter.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/entity/EntityToMapConverter.java b/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/entity/EntityToMapConverter.java
index dd7a916..fa0e12d 100644
--- a/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/entity/EntityToMapConverter.java
+++ b/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/entity/EntityToMapConverter.java
@@ -60,6 +60,7 @@ public class EntityToMapConverter {
 
         for ( Field field : entity.getFields() ) {
             if( field instanceof DistanceField){
+                //parse distance and add to metadata
                 if(!entityMap.containsKey("metadata"))entityMap.put("metadata",new HashMap<String,Object>());
                 DistanceField distanceField = (DistanceField) field;
                 Map<String,Object> metaMap = (Map) entityMap.get("metadata");

http://git-wip-us.apache.org/repos/asf/usergrid/blob/5cc0b380/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/field/DistanceField.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/field/DistanceField.java b/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/field/DistanceField.java
index 4e9e1e1..dd99792 100644
--- a/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/field/DistanceField.java
+++ b/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/field/DistanceField.java
@@ -20,7 +20,7 @@
 package org.apache.usergrid.persistence.model.field;
 
 /**
- * Classy class class.
+ * Distance field to pass distance down the parsing chain.
  */
 public class DistanceField extends DoubleField {
     public static final String NAME = "distance";

http://git-wip-us.apache.org/repos/asf/usergrid/blob/5cc0b380/stack/corepersistence/queryindex/src/main/java/org/apache/usergrid/persistence/index/GeoCandidateResult.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/queryindex/src/main/java/org/apache/usergrid/persistence/index/GeoCandidateResult.java b/stack/corepersistence/queryindex/src/main/java/org/apache/usergrid/persistence/index/GeoCandidateResult.java
index 07ef41c..dc91be9 100644
--- a/stack/corepersistence/queryindex/src/main/java/org/apache/usergrid/persistence/index/GeoCandidateResult.java
+++ b/stack/corepersistence/queryindex/src/main/java/org/apache/usergrid/persistence/index/GeoCandidateResult.java
@@ -24,7 +24,7 @@ import org.apache.usergrid.persistence.model.entity.Id;
 import java.util.UUID;
 
 /**
- * Classy class class.
+ * Result for Geo candidates
  */
 public class GeoCandidateResult extends CandidateResult {
     private final double distance;

http://git-wip-us.apache.org/repos/asf/usergrid/blob/5cc0b380/stack/corepersistence/queryindex/src/main/java/org/apache/usergrid/persistence/index/impl/EsEntityIndexImpl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/queryindex/src/main/java/org/apache/usergrid/persistence/index/impl/EsEntityIndexImpl.java b/stack/corepersistence/queryindex/src/main/java/org/apache/usergrid/persistence/index/impl/EsEntityIndexImpl.java
index b32a11c..0cfa18b 100644
--- a/stack/corepersistence/queryindex/src/main/java/org/apache/usergrid/persistence/index/impl/EsEntityIndexImpl.java
+++ b/stack/corepersistence/queryindex/src/main/java/org/apache/usergrid/persistence/index/impl/EsEntityIndexImpl.java
@@ -668,12 +668,13 @@ public class EsEntityIndexImpl implements EntityIndex,VersionedData {
         logger.debug( "   Hit count: {} Total hits: {}", hits.length, searchHits.getTotalHits() );
 
         List<CandidateResult> candidates = new ArrayList<>( hits.length );
-        final boolean isGeo = query.getOriginalQuery().contains("location") && query.getOriginalQuery().contains("within");
+
+
 
         for ( SearchHit hit : hits ) {
             CandidateResult candidateResult;
 
-            candidateResult =  parseIndexDocId( hit, isGeo );
+            candidateResult =  parseIndexDocId( hit, query.isGeoQuery() );
             candidates.add( candidateResult );
         }
 

http://git-wip-us.apache.org/repos/asf/usergrid/blob/5cc0b380/stack/corepersistence/queryindex/src/main/java/org/apache/usergrid/persistence/index/impl/IndexingUtils.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/queryindex/src/main/java/org/apache/usergrid/persistence/index/impl/IndexingUtils.java b/stack/corepersistence/queryindex/src/main/java/org/apache/usergrid/persistence/index/impl/IndexingUtils.java
index 88da04e..ae2a6e6 100644
--- a/stack/corepersistence/queryindex/src/main/java/org/apache/usergrid/persistence/index/impl/IndexingUtils.java
+++ b/stack/corepersistence/queryindex/src/main/java/org/apache/usergrid/persistence/index/impl/IndexingUtils.java
@@ -222,9 +222,7 @@ public class IndexingUtils {
         builder.append( type ).append( "(" ).append( value ).append( ")" );
     }
 
-    /**
-     * Parse the document id into a candidate result
-     */
+
     public static CandidateResult parseIndexDocId( final SearchHit hit ) {
         return parseIndexDocId(hit.getId());
     }

http://git-wip-us.apache.org/repos/asf/usergrid/blob/5cc0b380/stack/corepersistence/queryindex/src/main/java/org/apache/usergrid/persistence/index/query/ParsedQuery.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/queryindex/src/main/java/org/apache/usergrid/persistence/index/query/ParsedQuery.java b/stack/corepersistence/queryindex/src/main/java/org/apache/usergrid/persistence/index/query/ParsedQuery.java
index bb87dcc..1cb3ba2 100644
--- a/stack/corepersistence/queryindex/src/main/java/org/apache/usergrid/persistence/index/query/ParsedQuery.java
+++ b/stack/corepersistence/queryindex/src/main/java/org/apache/usergrid/persistence/index/query/ParsedQuery.java
@@ -202,4 +202,8 @@ public class ParsedQuery {
     public Operand getRootOperand() {
         return rootOperand;
     }
+
+    public boolean isGeoQuery(){
+        return getOriginalQuery().contains("location") && getOriginalQuery().contains("within");
+    }
 }