我在 Postgres 数据库上有一个 Rails 应用程序,我需要有一个搜索字段供用户输入字符串并在数据库中查找可能的地址匹配项(在城市内)。在数据库中,我有一列包含完整地址。
我不能对输入做出假设,所以我想我应该首先尝试以某种方式直接在数据库上查找地址(可能使用 LIKE 查询?),如果失败,请求地理编码 API(即谷歌)返回与查询匹配的格式良好的地址列表并在我的数据库中搜索这些地址列表。
我将不胜感激有关如何执行此操作的任何指导。
我在 Postgres 数据库上有一个 Rails 应用程序,我需要有一个搜索字段供用户输入字符串并在数据库中查找可能的地址匹配项(在城市内)。在数据库中,我有一列包含完整地址。
我不能对输入做出假设,所以我想我应该首先尝试以某种方式直接在数据库上查找地址(可能使用 LIKE 查询?),如果失败,请求地理编码 API(即谷歌)返回与查询匹配的格式良好的地址列表并在我的数据库中搜索这些地址列表。
我将不胜感激有关如何执行此操作的任何指导。
我不认为 FTS(全文搜索)是你想要的。您必须使用可以匹配地址的地址 API。
我已经成功且轻松地将 SmartyStreets 用于此类事情。他们有一个您可以使用的免费帐户。 http://smartystreets.com
此外,如果您确实想尝试沿着 FTS 路线走,这里有一个 Gist 解释了如何做到这一点。 https://gist.github.com/4365593
您可能已经知道它,但是 postresql 集成了全文搜索引擎,因此现在是利用它的好时机。我建议观看那出色的 railscast。
然后一旦实施:
class Place < AR
def search_db_or_geokit(query)
res = db_search()
if res.empty?
res = geokit_search(query)
else
res
end
end
def geokit_search(query)
# ...
end
def db_search(query)
# ...
end
end
对于地理编码谷歌搜索 api,可能有一个很好的 gem,比如geokit