如何在PostgreSQL中优化模糊字符串匹配短语对(交集名称)



我们有一个交叉点名称表,如'Main St / Broadway Ave',我们正在尝试将可能混乱的用户输入(形式为(street1, street2)(与这些名称相匹配。无法保证输入的顺序与街道名称相同。

我们将交叉口名称拆分为一个长格式表,以便优化进行两次模糊距离比较,例如

+--------+----------------+
| int_id | street         |
+--------+----------------+
| 1      | 'Broadway Ave' |
+--------+----------------+
| 1      | 'Main St'      |
+--------+----------------+

在街道栏上写一个要点八卦索引。

因此,查询会找到所有接近一个或另一个街道输入的int_id,然后执行GROUP BY以找到组合距离最近的一个(我稍后会插入查询(。这工作得很好,但我们仍然需要它工作得更快。PostgreSQL的全文搜索库中有什么东西可以做到这一点吗?

函数中使用的查询示例,以及相关说明https://explain.depesz.com/s/J9lj

SELECT intersections.int_id, 
SUM(LEAST(
intersections.street <-> street1,
intersections.street <-> street2))
, intersections.int_id
FROM intersections
WHERE (street1 <% intersections.street
OR 
street2 <% intersections.street 
)
GROUP BY intersections.int_id
HAVING COUNT(DISTINCT TRIM(intersections.street)) > 1
ORDER BY AVG(
LEAST(
intersections.street <-> street1,
intersections.street <-> street2))

我知道你正在寻找PostgreSQL解决方案,但如果你将数据克隆到Elastic Search中并在那里进行搜索,这会更容易(更快(。弹性搜索还为您提供了比关系数据库更大的灵活性。

最新更新