名词 | 含义 |
---|---|
longitude | 经度 |
latitude | 纬度 |
LatLon | 纬度经度的缩写 |
Grid | 网格 |
空间搜索,又名Spatial Search(Spatial Query),基于空间搜索技术,可以做到:
1)对点Point(经纬度)和其他的几何图形建索引
2)根据距离排序
3)根据矩形,圆形或者其他的几何形状过滤搜索结果
Solr自3.1以来就开始支持地理空间数据搜索,例如fieldType使用location_rpt可存储地理位置的经纬度信息。
注意:建议不要使用Solr的保留字或者存在字段名和字段类型冲突的情况,否则可能在录入数据时出现异常信息。
学习利用空间查询的基本语法和集合操作,可以帮助实现相关的几何搜索需求。
例如,圆形、方形及多边形查询语法示例:
q={&q=:&fq={!geofilt sfield=store}&pt=45.15,-93.85&d=5}
q={&q=:&fq={!bbox sfield=store}&pt=45.15,-93.85&d=5}
q={&q=:&fq={!field f=geo}Intersects(POLYGON((-10 30, -40 40, -10 -20, 40 20, 0 0, -10 30)))}
Solr支持的几种常见的几何操作:
WITHIN:在内部
CONTAINS:包含关系
DISJOINT:不相交
Intersects:相交(存在交集)
基于网格的定位系统使用了前缀树(prefix tree)概念,以一系列或粗略或精确的前缀来代表地点。
SpatialRecursivePrefixTreeFieldType对前缀树进行抽象表示,允许实现用来索引或搜索空间数据的多层级网格系统的不同功能。
Solr空间索引主要有两类:GeohashPrefixTree(Geohash)与QuadPrefixTree(四叉树,对应笛卡尔分层策略)。
Geohash是专门为建立地球空间模型而设计的,可以在schema中定义SpatialRecursivePrefixTreeFieldType时,设定geo=true开启这个功能。
https://wiki.apache.org/solr/SpatialSearch
https://lucene.apache.org/solr/guide/6_6/spatial-search.html#SpatialSearch-RPT
https://www.slideshare.net/lucidworks/lucenesolr-spatial-in-2015-presented-by-david-smiley
https://www.slideshare.net/LucidImagination/spatial-search-with-geohashes
https://www.thesisscientist.com/docs/E-Booklets/6c243540-8456-4c6e-b1ab-491af8c276f3
美团的技术实力杠杠的,有时间也把空间搜索流程分析一遍。
https://tech.meituan.com/2014/09/02/solr-spatial-search.html
https://dataknocker.github.io/2014/04/11/solr空间索引原理及源码分析/
https://www.ibm.com/developerworks/cn/java/j-spatial/
https://www.cnblogs.com/LBSer/p/3310455.html
https://github.com/ashwin711/proximityhash
FI Solr的二次开发指南太简配了,完全无法指导特定的业务场景开发,当有客户有需求过来咨询,一来一回,浪费时间人力。
https://blog.csdn.net/u010367582/article/details/54289945
https://blog.csdn.net/alan_liuyue/article/details/77800281
https://blog.csdn.net/u014508939/article/details/85165807
https://blog.csdn.net/ljsmart/article/details/84159800
https://django-haystack.readthedocs.io/en/master/spatial.html
http://www.cnblogs.com/hanhuibing/articles/5680616.html
https://derickrethans.nl/spatial-indexes-solr.html