确定地理位置是否是搜索字符串的子字符串

时间:2012-03-03 15:15:30

标签: php mysql string search sphinx

我的网站内容可以使用由Sphinx搜索提供支持的搜索栏进行搜索(仅提及因为我最终会使用Sphinx的地理搜索功能)。

表格字段包括:

Id, title, description, tags, geolocation

如何确定字符串的任何部分是否包含对地理位置的引用?我正在寻找的解决方案可能会在PHP中执行,然后我将像往常一样使用Sphinx进行搜索。

例如,如果有人搜索以下任何内容:

Car parts in California

Car parts near San Francisco

90210 car parts

然后,我希望能够在所需位置的某个半径内返回与car parts匹配的所有条目的列表。

我对如何使这个问题更简单的任何建议持开放态度。

注意:用户的地理位置子字符串条目是可选的。因此,解决方案需要确定它的存在,然后相应地采取行动。

1 个答案:

答案 0 :(得分:2)

您可以使用几个API:

http://www.datasciencetoolkit.org/< - 看看Geodict

http://developer.yahoo.com/geo/placemaker/guide/web-service.html

http://developers.metacarta.com/api/< - 查看Query Parser

......他们执行所有"繁重的工作"为你:)

另外,可以用狮身人面像自己制作自己的!

下载geonames数据库http://www.geonames.org/

的副本

将其粘贴在数据库表中,并在其上创建一个sphinx索引。

然后获取您的查询字符串并针对' geo'运行SPH_MATCH_ANY查询。表。

然后查看sphinx结果集,并提取任何匹配的地方 - 以创建没有地名的新查询。

此sphinx索引还将返回您可用于实际查询的地理坐标:)

(你可以稍微优化一下,特别注意' in / near'并且只是删除它们,或者使用它们来明确地识别地名)

祝你好运!

(邮政编码处理 - 也可以用同样的方式完成 - 也将邮政编码放在sphinx索引中。有可下载的在线副本。或者可以作为特殊情况处理 - 寻找一个数字)< / p>