動的クエリを使用して 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;
}