存储和查询邮政地址

时间:2012-02-01 22:11:29

标签: c# java search street-address

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

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

例如

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

因此,例如,如果想要找到“Big Towers中的Flat 23”,我可能会在查询框中键入“23 Big Towers”或“Big Towers 23”,并希望它能找到上述内容。但由于这些领域是分开的,这很难实现。

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

有没有人对如何存储地址和构建搜索UI +查询有任何建议,以便从用户的角度来看这一点?

编辑:添加了一个示例

4 个答案:

答案 0 :(得分:2)

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

生成的字段:

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%' 

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:0)

我喜欢自己将地址存储为xml片段。具有额外属性的范围,如城镇,国家,国家等。

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

答案 3 :(得分:0)

您只需使用参数化查询即可。只需用%为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)