我正在使用动态查询来搜索 SOLR,并且正在尝试为商店定位器功能执行复杂的地理位置查询。它应该在距离一个位置(点)的距离 D 内检索多达 5 个位置。它还应该按距离排序,并在结果中返回距离。
我不知道如何让 API 输出正确的查询。
有人可以指导我如何使用 Spring SOLR Data API 来正确获取此查询输出吗?
我正在使用 SOLR 4+ 地理过滤器功能。
我需要的 SOLR 查询是这样的(直接工作):
http://localhost:8983/solr/aust/select?q={!func}geodist()&fl=*,score,geodist()&fq={!geofilt}&pt=-37.818635,145.0014704&sfield=location&d=15&fq=docType:LOCATION&rows=5&wt=json&indent=true&sort=score asc
到目前为止,我的代码看起来像这样(不起作用):
@Override
public SimpleSearchResults searchByRegion (SimpleSearchForm searchForm, RegionDocument region)
{
logger.entry();
SimpleQuery query = new SimpleQuery();
query.addCriteria(new Criteria("text").contains(Criteria.WILDCARD));
int distance = 5;
Point point = new org.springframework.data.solr.core.geo.Point(region.getLat(), region.getLng());
GeoDistanceFunction geo = GeoDistanceFunction.distanceFrom("location").to(point);
query.addFilterQuery(new SimpleFilterQuery(Criteria.where(geo)));
SimpleFilterQuery typeQuery = new SimpleFilterQuery();
typeQuery.addCriteria(new Criteria("docType").is("LOCATION"));
Sort sort = new Sort(Sort.Direction.ASC, "score");
query.addFilterQuery(typeQuery);
// add paging to request
PageRequest page = new PageRequest(0, 5, sort);
query.setPageRequest(page);
// we build the search request without facets initially
//search.setPageRequest(page);
Page<LocationDocument> results = solrTemplate1.queryForPage(query, LocationDocument.class);
logger.exit();
SimpleSearchResults dto2 = new SimpleSearchResults();
dto2.setSearchTerm(searchForm.getSearchTerm());
dto2.setPage(results);
return dto2;
}