PostgreSQL PostGIS 与 ElasticSearch 空间搜索
Posted
技术标签:
【中文标题】PostgreSQL PostGIS 与 ElasticSearch 空间搜索【英文标题】:PostgreSQL PostGIS vs ElasticSearch Spatial search 【发布时间】:2014-06-02 22:01:43 【问题描述】:我正在处理需要进行地理空间过滤的搜索查询(即过滤特定半径之外的所有元素)。我们将 PostgreSQL 和 ElasticSearch 作为我们基础架构的一部分,我正在评估使用这两者中的哪一个。
我并不是要“哪个更好”,但客观的优缺点列表会在易于实施、性能、可扩展性等方面有所帮助。
【问题讨论】:
我多年来一直在使用 Postgres/Postgis,并且即将开始测试一些与 Lucene 和 Solr 匹配的地理编码和模糊地址(我从未使用过,但在)。如果我发现任何可能对您有用的东西,我会通知您。您正在查看什么大小的数据集,您能否提供更多关于您可能正在运行的查询类型的信息。 @JohnBarça 那太好了,如果您发现一些有趣的事情,请告诉我。我对 2 种类型的查询感兴趣(尽管本质上非常相似):1)以无特定顺序(即按接近度过滤)获得一组在某个邻近范围内的结果,以及 2)返回一组结果按距离排序,最近的在前。 【参考方案1】:postgis 的扩展方式与 postgresql 的扩展方式相同。 postgis 索引的工作方式与其他关系索引几乎相同,您可以查看here。
如果您查看链接,它解释说它使用在每个插入操作上执行的一些几何算法进行索引,因此它在实时应用程序中可能没有足够的响应。
虽然 elasticsearch 具有基于 Lucene 索引的实时索引。弹性搜索通常更适合实时繁重的应用程序,然后是 Postgresql。
Postgresql 有一个巨大的优势,那就是简单。使用 Postgresql 实现测试和维护这样的功能要容易得多。例如,我更喜欢快速创建基于 Postgresql 的原型,如果由于大量写入等原因开始表现不佳,我会切换到 elasticsearch 实现。
【讨论】:
以上是关于PostgreSQL PostGIS 与 ElasticSearch 空间搜索的主要内容,如果未能解决你的问题,请参考以下文章