【问题标题】:MySQL-Solr for geospatial search用于地理空间搜索的 MySQL-Solr
【发布时间】:2012-09-09 12:37:07
【问题描述】:

该站点目前主要进行范围搜索(纬度和经度),并带有一些过滤,例如WHERE color = "red" 类型的子句。但是使用带有地理空间索引的 MySQL 仍然很慢,我需要加快速度。

问题:使用 Solr 进行搜索是个好主意吗?

如果是这样,我应该只将 MySQL 中的范围列复制到 Solr 中,并在 MySQL 中执行 WHERE 子句,还是在 Solr 中执行这两种类型的查询?

我读到 Solr 不用于存储数据,如数据库(即 MySQL)。这是否意味着如果我的搜索可以发生在 10 个不同的列(或 Solr 术语中的 field),并且我复制 Solr 的 MySQL 表只有 11 个表,我仍然会保留 MySQL 表,即使它会使用几乎两倍的存储空间,其中一半是多余的?

看来我正在使用结构化数据(因为每一行都定义了许多列?)并将整个表存储在 Solr 中,而不是在 MySQL 上存储冗余数据,并且 Solr 将在写入时节省存储空间和数据库访问操作的数量。 Solr 这里是一个不错的选择吗?

在速度方面,用 PostGIS 好还是 Solr 好?

【问题讨论】:

    标签: mysql solr lucene geospatial postgis


    【解决方案1】:

    Solr 具有非常快速的数字/日期范围查询。 Solr 3 地理空间利用了这一点,我写了a plugin,效果更好。我怀疑 MySQL 更快。

    也就是说,如果您尝试解决的唯一问题是缓慢的地理空间查询,那么引入 Solr 可能会解决它,但会为您的系统增加很多整体复杂性,因为它并非旨在取代关系数据库——它和他们一起工作。不要误会我的意思; Solr 很棒,特别是对于分面导航和文本搜索。但是您没有声明您想利用 Solr 的主要功能。

    PostGIS 是迄今为止最成熟的开源 GIS 存储系统。我建议您尝试将其作为实验,看看它是否更好。我会尝试使用 lat + lon 对列的方法,就像您现在使用 MySQL 所做的那样,我也会尝试使用 PostGIS 本地地理空间方法来执行此操作,无论具体是什么。

    您可以在 MySQL 或 PostGIS 中尝试的一件事是将纬度和经度值四舍五入到小数位数以获得所需的适当精度水平,这肯定远低于双精度的完整精度。如果您将它们存储在浮点数而不是双精度数中,则精度上限为 2.37 米。如果要扫描的不同值较少,您使用的系统可能会更轻松地进行范围查询。

    【讨论】:

    • 增加复杂性是指使用 DIH 将 Solr 与 MySQL 同步(它将充当主要数据存储)?在我的情况下,让 Solr 的数据落后 MySQL 1 分钟仍然是可以接受的。
    • SOLR-2155 看起来很可爱,一定会尝试一下!我需要的是对一个有 500k 行的表进行快速范围搜索(时间戳和纬度/经度对)。我预计不需要全文搜索。至于四舍五入的纬度/经度值,我还将使用这些纬度/经度值在地图上绘制图钉。在 Solr 中存储时将值四舍五入,在地图上绘制图钉时使用存储在 MySQL 中的更准确的值是否是一种好方法?
    • 您可能会使用 DIH;是的。 Solr 中只有区区 500k 行,不必费心将 lat-lon 舍入作为优化。
    • 另外:要记住的一件大事是,与关系数据库相比,Solr 的数据模型有限。没有 JOIN,也不要尝试即时加入要求性能问题的数据库。理想情况下,Solr 将能够完全满足您试图加速的搜索请求。无耻的插件:我写了流行的 Solr 书,您可以将其视为 Solr wiki 之外的资源。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-29
    • 2015-01-12
    • 2012-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多