Solr 空间查询

本文介绍如何使用Apache Solr进行地理空间搜索,包括使用geofilt和bbox函数定义圆形和方形搜索范围的方法,以及通过SolrJ API实现的具体步骤。文章详细解释了如何设置查询参数来获取指定地理位置附近的文档,并按距离排序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

URL:

http://127.0.0.1:8080/solr/usercard/select/?q=*%3A*&version=2.2&start=0&rows=10&indent=on&&fq={!geofilt%20sfield=location}&pt=39.885,116.384034&d=1

 

OfficialDoc:

For example, to sort your results by ascending distance, enter ...&q=*:*&fq={!geofilt}&sfield=store&pt

. =45.15,-93.85&d=50&sort=geodist asc

 

To return the distance as the document score, enter ...&q={!func}geodist()&sfield=store&pt=45.15,-. 93.85&sort=score+asc

 

精确按照点和距离搜索,geofilt函数为圆形计算:

&q={!func}geodist()&fq={!geofilt}&sfield=latilongitude&pt=45.15,93.85&d=5&sort=score+asc

geofilt函数为方形距离计算:

&q={!func}geodist()&fq={!bbox}&sfield=latilongitude&pt=45.15,93.85&d=5&sort=score+asc

 

SolrJ:

solrQuery.setQuery("{!func}geodist()"); // 以名称为score作为距离返回 使sfield及pt参数生效

// solrQuery.set("spatial", true);

solrQuery.addFilterQuery("{!geofilt}"); // 限定距离,使"d"参数生效

solrQuery.set("sfield", "latilongitude"); // 设置查询的经纬度字段

solrQuery.set("pt", latilongitude); // 设置查询 点

solrQuery.set("d", distance); // 设置查询半径

solrQuery.setSort("score", SolrQuery.ORDER.asc);  // score在{!func}geodist()函数下含义为距离,按照最近距离排序

// solrQuery.setSort("geodist()", SolrQuery.ORDER.asc);//被setSort("score", SolrQuery.ORDER.asc)替代

// 追加其它条件

// solrQuery.addFilterQuery(queryString); // 可有可没有...

// 设置返回字段,根据需求定制, score为距离

query.setFields("latilongitude","score");

参考: http://wiki.apache.org/solr/SpatialSearch 

geodist geofilt bbox

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值