2017-08-04 21 views
0

Ciao、 Spring Solr Dataで動作する以下のsolrクエリを取得できません。Spring Solrデータのgeodist()関数でソートするには?

Q =名前:RSA & sfield =座標& PT = -8.506854,115.262478 &ソート= geodist()%の20asc

クエリは、私はSolrの管理コンソール内に置く場合は動作しますが、それスプリングソルデータでは機能しません。私ので、私は、以下の機能を備えたCustomRepository作成geodistは、ドキュメント内の並べ替えについての例を見つけることができませんでした:構文エラーのため

public Page<StructureDocument> findStructuresByNameAndCoordinates(String value, Point point, Pageable page) { 

StringBuilder queryBuilder = new StringBuilder(); 
queryBuilder.append("name:*").append(value).append("*"); 
queryBuilder.append("&sfield=coordinates"); 
queryBuilder.append("&pt=").append(point.getX()).append(",").append(point.getY()); 
queryBuilder.append("&sort=geodist() asc"); 

Query query = new SimpleQuery(new SimpleStringCriteria(queryBuilder.toString())).setPageRequest(page); 

しかし、それは動作しませんが((Solrjはこの文字を好きではないようです) 。これはエラーです:。

; nested exception is org.apache.solr.client.solrj.impl.HttpSolrClient$RemoteSolrException: Error from server at http://localhost:8983/solr: org.apache.solr.search.SyntaxError: Cannot parse 'name:*francesco*&sfield=coordinates&pt=-8.506854,115.262478&sort=geodist() asc': Encountered " ")" ") "" at line 1, column 71. 

どのようにソート春のSolrのデータ??

はどうもありがとうございましたとgeodist機能によってでき

+0

私は** ClientUtils.escapeQueryChars()**、構文エラーが消えるも使用しようとしたが、Solrには奇妙な結果を返します。.. – dado

答えて

0

私はソルを見つけましたションここSOLR Spring Data geospatial query

@Override 
public Page<StructureDocument> 
findStructuresByNameAndCoordinates(String value, Point point, Pageable 
page){ 
SimpleQuery query = new SimpleQuery().setPageRequest(page); 
query.addProjectionOnField("*"); 
query.addProjectionOnField("score"); 

StringBuffer buf = new StringBuffer(""); 
buf.append("{!geofilt pt="); 
buf.append(point.getX()); 
buf.append(","); 
buf.append(point.getY()); 
buf.append(" sfield=coordinates d="); 
buf.append(2000.0); 
buf.append(" score=distance}"); 

query.addCriteria(new SimpleStringCriteria(buf.toString())); 

FilterQuery searchTerm = new SimpleFilterQuery(); 
searchTerm.addCriteria(new Criteria("name").contains(value)); 
query.addFilterQuery(searchTerm); 

query.addSort(new Sort(Sort.Direction.ASC, "score")); 

はまた私がgeodist関数によって計算店舗距離値に使用私のSolr文書「スコア」属性に追加しました。

@Score 
private Double score; 

この解決策は機能しますが、私にとっては実際にはうまくいかないことがわかります。このリンクをご覧ください。私はそれを調査し続けます。

How to return distance and score in spatial search using spring-data-solr

関連する問題