我正在使用Google App Engine并将地理位置存储在可搜索的文档索引中。当我使用距离函数搜索位置时,例如" 距离(myGeoPoint,geopoint(35.2,40.5))> 100"搜索返回预期文档。在返回的结果中,我想找出每个myGeoPoint在geopoint中传递的距离,所以我添加了一个"距离" QueryOptions中的FieldExpression但看起来像字段表达式没有得到评估,搜索将字段返回为具有空值的HTML。但为了确保我正确构建FieldExpression,我尝试将表达式替换为其他表达式,例如(count(someOtherField))并且它可以工作并返回正确的数据。所以看起来我使用距离函数有问题。有没有人知道我在FieldExpression中使用距离函数有什么问题?它应该工作,对吗? FieldExpressions不支持距离函数吗?
或者,是否有其他方法可以使兴趣点与搜索查询匹配的所有位置之间达到距离?
我的示例代码:
// use search api
IndexSpec indexSpec = IndexSpec.newBuilder().setName(
"com.mycompany").build();
Index index = SearchServiceFactory.getSearchService()
.getIndex(indexSpec);
QueryOptions options = QueryOptions.newBuilder()
.setLimit(100)
.setFieldsToReturn("myGeoPoint")
.addExpressionToReturn(FieldExpression.newBuilder()
.setName("calculatedDistance")
.setExpression("distance(myGeoPoint, geopoint(37.738767, -122.424037))"))
.build();
Query query = Query.newBuilder().setOptions(options).build("distance(myGeoPoint, geopoint(37.738767, -122.424037)) < 10000");
Results<ScoredDocument> results = null;
try {
results = index.search(query);
for (ScoredDocument document : results) {
List<Field> expressions = document.getExpressions();
for (Field e : expressions) {
System.out.println("expression=" + e);
}
}
} catch (SearchException e) {
if (StatusCode.TRANSIENT_ERROR.equals(
e.getOperationResult().getCode())) {
results = index.search(query);
}
}
这是我在输出中看到的(而不是HTML,我期望calculateDistance为具有有效数值的数字):
expression = Field(name = calculatedDistance,value =,type = HTML)