繁体   English   中英

如何在Spring Solr数据中按geodist()函数排序?

[英]How to sort by geodist() function in Spring Solr Data?

乔,我无法在Spring Solr Data中获得以下Solr查询。

q =名称: rsa &sfield = coordinates&pt = -8.506854,115.262478&sort = geodist()%20asc

如果我将查询放入solr管理控制台中,则该查询有效,但不适用于spring solr数据。 我没有在文档中找到有关geodist排序的示例,因此创建了一个具有以下功能的CustomRepository:

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不喜欢此chars()。这是错误:

; 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.

如何使用Spring Solr数据按geodist函数排序?

非常感谢你。

我在这里找到了SOLR Spring Data地理空间查询解决方案

@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"));

此外,我在solr文档中添加了“得分”属性,该属性用于存储由geodist函数计算的距离值。

@Score
private Double score;

此解决方案有效,但是我知道有一种更好的方法实际上对我不起作用,请参阅此链接。 我将继续调查。

如何使用Spring Data Solr在空间搜索中返回距离和得分

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM