1 需求

获取离我最近的经销商列表

2 分析

  1. 离我最近需要对空间搜索, 地理空间的索引原理: {美团}Solr 空间搜索原理分析与实践
  2. 上面的文章首先生成了一个 geohash 值, 然后对 hash 值进行排序, 这种方法的优点是 筛选性能好, 支持更多的特性. 但是我只是对距离排序, 所以决定利用另一种比较简单的方式.
  3. 直接使用 LatLonType 索引坐标

3 实践

3.1 schema 配置

官方文档: Schema Configuration 依据文档, 将如下两行加入到 schema.xml 文件中:

<fieldType name="location" class="solr.LatLonType" subFieldSuffix="_coordinate"/>
<dynamicField name="*_coordinate" type="tdouble" indexed="true" stored="false"/>

如上, 会创建一个 type, type namelocation.

创建 field :

<field name="location" type="location" indexed="true" stored="true" required="false"/>

3.2 索引数据格式

"location": "23.359024,104.276517" location.png

3.3 查询

查询条件

&q=*:*&fq={!geofilt}&sfield=location&pt=45.15,-93.85&d=10&sort=geodist() asc
  1. sfield: 距离排序的字段
  2. pt: 用户坐标
  3. d: 离用户坐标 10 公里以内的被筛选出来
  4. sort: geodist() asc

根据这三个条件及可以查询距离最近的文档

4 总结

这种方法是比较简单的一种, 但是如上所说, 性能不如 rpt 方式, 但是在数据量不大时, 可以直接使用此方法.

Last Updated 2017-05-15 一 18:48.
Render by hexo-renderer-org with Emacs 25.1.1 (Org mode 9.0.2)