【问题标题】:Search for user query string for address in database在数据库中搜索地址的用户查询字符串
【发布时间】:2012-12-19 02:39:19
【问题描述】:

我在 Postgres 数据库上有一个 Rails 应用程序,我需要有一个搜索字段供用户输入字符串并在数据库中查找可能的地址匹配项(在城市内)。在数据库中,我有一列包含完整地址。

我无法对输入做出假设,所以我想我应该首先尝试以某种方式直接在数据库中查找地址(可能使用 LIKE 查询?),如果失败,请求地理编码 API(即 Google)返回与查询匹配的格式良好的地址列表并在我的数据库中搜索这些地址列表。

我将不胜感激有关如何执行此操作的任何指导。

【问题讨论】:

  • 您考虑过使用 sphinx 或 solr 进行搜索吗?
  • 这会像比较用户输入和地址栏一样简单吗?还是我应该做一些解析?
  • 我不太清楚:你有城市栏和完整的地址栏吗?或只是完整的地址列。在某些时候,如果您想将搜索范围限定为特定城市,您需要说出城市名称。那应该怎么做呢?
  • 我有一个完整的地址栏和一个城市栏,我总是在一个城市内搜索。

标签: ruby-on-rails postgresql geocoding


【解决方案1】:

我认为 FTS(全文搜索)不是您想要的。您必须使用可以匹配地址的地址 API。

我已经成功且轻松地将 SmartyStreets 用于此类事情。他们有一个您可以使用的免费帐户。 http://smartystreets.com

此外,如果您确实想尝试走 FTS 路线,这里有一个 Gist 说明了如何进行。 https://gist.github.com/4365593

【讨论】:

    【解决方案2】:

    您可能已经知道它了,但是 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

    【讨论】:

    • 谢谢。但是,您能解释一下铁路广播还是发布一个无偿的解释?我在 railscasts.com 上没有 Pro 帐户
    • 这是一个免费演员表,希望足够好...railscasts.com/episodes/273-geocoder
    猜你喜欢
    • 1970-01-01
    • 2018-02-21
    • 1970-01-01
    • 2011-11-23
    • 1970-01-01
    • 2015-05-27
    • 2019-12-09
    • 1970-01-01
    相关资源
    最近更新 更多