2010-09-20 101 views
2

我试图根据用户输入类型文本搜索一个SQL Server 2008表(包含大约700万条记录),用于引用和国家。我从用户那里得到的搜索字符串可以是任何类似的东西:如何根据用户搜索查找城市和国家?

“旧金山,美国的酒店”或“纽约,纽约”或“巴黎sddgdfgxx”或“多伦多加拿大”的术语不会被逗号隔开而不是按照特定的顺序,并且可能存在无用的数据。

这是我的尝试:

方法1:FTS有载: 例如:SELECT * FROM其中包含cityNames(城市名, '字词1和字词2') - 有和 SELECT * FROM其中包含cityNames (cityname,'word1 or word2') - 与或

这并没有很好地工作,因为像'sddgdfgxx'这样的术语在与'AND'一起使用时不会返回任何内容。方法2:这实际上是一个反向搜索,它的逻辑是搜索用户是否输入了字符串包含我桌子上的任何城市或国家。通过这种方式,我肯定会知道'艾克斯普罗旺斯'或'纽约'被搜索到。

例如:从cityCountryNames选择*,其中“加拿大安大略省,多伦多就像cityCountryNames

笔记:我是不是能够得到结果两个字城市和查询缓慢。

任何帮助表示赞赏。

回答

2

我强烈建议使用第三方API(如Google Geocoding API)来接收此类输入并将其解析为具有分立部分(街道地址,城市,州,国家等)的位置。然后,您可以使用这些分立部分在必要时搜索数据库。

像谷歌和必应这样的地图服务已经解决了这个问题,比你或我曾经想过的要好,为什么不利用他们所做的所有工作?

+0

使用某些地理编码API具有查询限制,有些甚至禁止用于商业用途。所以一定要阅读印刷精美的 – Mikos 2010-09-23 22:46:13

+0

@Mikos - 这当然是一个好主意。如果您要在地图上显示地理编码点,Google允许使用其地理编码API。看起来Bing可能有更严格的使用条款。 – 2010-09-24 17:58:15

0

SQL并非针对您正在执行的查询类型而设计的,当然不是可扩展的。 我的建议如下:

  1. 指数所有的地方(城市+国家)成Solr指数。 Solr是使用Lucene构建的FOSS搜索服务器,可以毫秒或更短的时间轻松查询7MM记录索引。

  2. 用户键入的字符串查询solr和瞧,第一场比赛是最好的比赛。 因此,即使用户输入“Paris sddgdfgxx”,巴黎应该是您的第一次打击。如果你想获得真正复杂的使用正克的方法(​​又称为Lucene的Shingles

由于Solr的提供一个RESTful(HTTP)API应该很容易融入你是在什么平台。

相关问题