【问题标题】:Determine if geolocation is substring of search string确定地理位置是否是搜索字符串的子字符串
【发布时间】:2012-03-21 18:38:02
【问题描述】:

我有一个网站,其内容可使用由 Sphinx Search 提供支持的搜索栏进行搜索(仅提及是因为我最终将使用 Sphinx 的地理搜索功能)。

表格字段包括:

Id, title, description, tags, geolocation

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

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

Car parts in California

Car parts near San Francisco

90210 car parts

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

我愿意接受有关如何简化此问题的任何建议。

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

【问题讨论】:

  • 两个问题,1.您需要覆盖的地理区域是什么(当地,美国,全球)? 2. 您需要多语言支持吗?
  • @AlexC 地理位置是全球性的,可以像大陆一样普遍,也可以像城市或邮政编码一样具体(类似于 Google 如何返回在某些搜索查询中输入的位置地图)。至于多语言支持,暂时都是英文的。

标签: php mysql string search sphinx


【解决方案1】:

您可以使用几个 API:

http://www.datasciencetoolkit.org/

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

http://developers.metacarta.com/api/

...他们为您执行所有“繁重的工作”:)

或者,可以用 sphinx 自己制作!

下载地名数据库http://www.geonames.org/的副本

将其粘贴到数据库表中,并在其上创建狮身人面像索引。

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

然后查看 sphinx 结果集,并提取任何匹配的地点 - 以进行没有地点名称的新查询。

这个狮身人面像索引还将返回您可用于实际查询的地理坐标 :)

(您可以对其进行一些优化以特别注意“in/near”,然后将其删除,或使用它们来明确识别地名)

祝你好运!

(邮政编码处理 - 也可以以相同的方式完成 - 也将邮政编码放入狮身人面像索引中。网上有可下载的副本。或者可以作为特殊情况处理 - 寻找一个数字)

【讨论】:

  • 我希望我能 +2。这似乎正是我想要的。我特别喜欢使用 Sphinx 的解决方案。我迫不及待地想测试一下。谢谢!
  • 我会给他+2。这与我的想法一致,但他做得更好更快。
  • 在针对geo 表执行SPH_MATCH_ANY 查询Springfield, Illinois 时,我收到了许多不同状态下各种Springfield 的结果。显然,伊利诺伊州的斯普林菲尔德位居榜首。选择顶部结果适用于本示例,但我是否应该始终只为每个查询选择顶部结果?如果用户输入多个位置怎么办?只是在寻找建议。
猜你喜欢
  • 2011-01-11
  • 2014-01-29
  • 2015-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-26
  • 1970-01-01
  • 2023-02-02
相关资源
最近更新 更多