【问题标题】:Storing and querying postal addresses存储和查询邮政地址
【发布时间】:2012-02-01 22:11:28
【问题描述】:

我有一个包含地址概念的系统(如邮政地址)。我们有一个地址表,其中包含 Address1-4、City、PostCode 字段。

我正在尝试找出存储此地址数据的最佳方式,以便可以在 UI 中轻松查询。用户通常不理解有单独的字段(可能除了邮政编码),因此要求他们将正确的字符串放在 5 个搜索字段中是行不通的。我觉得它需要是一个单一的搜索字段,它将尝试匹配地址的一部分。

例如

Address1: Flat 23
Address2: Big Towers
Address3: 1 Baker Street
Address4: (Blank)
City: London
PostCode: W1U 6AA

例如,如果想查找“Flat 23 in Big Towers”,我可能想在查询框中输入“23 Big Towers”或“Big Towers 23”并期望它找到上述内容。但由于字段是分开的,这很难实现。

该应用程序是完全专有的,因此更改地址的存储方式或以多种方式存储它是完全可行的。该应用是 C# UI 和 Java 中间层。

是否有人对如何存储地址和构建搜索 UI + 查询以从用户的角度直截了当有任何建议?

编辑:添加示例

【问题讨论】:

  • 使用数据库工具怎么样? IE。全文?这会是一个选择吗?

标签: c# java search street-address


【解决方案1】:

根据您的示例,您可以生成一个连接所有其他字段(带有空格分隔符)的生成字段。然后你可以只查询这个字段而不是其他字段,这样(用你的例子):

生成的字段:

Flat 23 Big Towers 1 Baker Street London W1U 6AA

查询:

SELECT
  * 
FROM
  Address
WHERE
  GeneratedField LIKE '%searchTerm1%' 
AND
  GeneratedField LIKE '%searchTerm2%'
AND
  GeneratedField LIKE '%searchTerm3%' 

【讨论】:

  • 这不适用于搜索字符串跨越 2 个或更多字段的示例。
【解决方案2】:

您是否可以选择连接到第 3 方 API?您可以使用原始字符串向 Google 或 Yahoo 地图发送请求,然后返回一组可用于比较的分隔良好的数据。这可能是最简单的 - 让 Google 的服务器为您完成!作为一个直接的答案,我会说分别存储每个地址组件,然后查询 API 查找结果。

我认为这里还有一些有趣的额外讨论:

Parse usable Street Address, City, State, Zip from a string

【讨论】:

  • 我已经把数据划分得很干净了,要弄清楚如何尽可能简单地搜索这些数据就成了一个问题。
  • 我设想为用户提供一个文本输入框,让 Google 将其解析为有意义的地址组件,然后将这些组件结果与数据库进行比较并找到最接近的匹配项 - 您是否正在寻找更具体的内容?
  • 我已经添加了一个例子,也许这样更清楚。虽然我可以更改应用程序的内部结构,但我们将其部署在其他公司内部,所以我宁愿避免使用谷歌之类的东西,因为它会引发安全问题。另外,我只想搜索存储在系统中的地址,而不是一般。例如,一次安装可能只有几千个相关地址。
【解决方案3】:

我自己喜欢将地址存储为 xml sn-p。具有城镇、国家、国家等额外属性的范围。

为您提供更多选择和肘部空间。

【讨论】:

    【解决方案4】:

    您只需使用参数化查询即可完成。对于 MSSQL,只需用 % 将每个文本值括起来,并将它们作为此查询的参数添加:

    SELECT * FROM Addresses WHERE Address1 LIKE @Address1 OR Address2 LIKE @Address2 OR Address3 LIKE @Address3 OR Address4 LIKE @Address4

    parameters.Add("@Address1", String.Format("%{0}%", address1Text.Text)

    【讨论】:

    • 我只希望有一个文本框供用户输入搜索查询,因为用户无法直观地确定哪个字段包含什么,而且这可能不会在整个过程中保持一致系统中的所有地址。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多