0

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

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

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

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

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

在速度方面,使用 PostGIS 或 Solr 会更好吗?

4

1 回答 1

2

Solr 具有非常快速的数字/日期范围查询。Solr 3 地理空间利用了这一点,我编写了一个做得更好的插件。我怀疑 MySQL 更快。

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

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

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

于 2012-09-09T15:01:52.010 回答