【问题标题】:Sphinx "reverse" search狮身人面像“反向”搜索
【发布时间】:2013-11-12 14:25:24
【问题描述】:

我们有一个网站,用户可以在该网站上为他们想要出售的商品投放广告,其中包含价格、位置、标题和描述等参数。然后可以使用 sphinx 搜索这些,并允许用户指定最小和最大价格、具有搜索半径的位置(使用谷歌地图)等。用户可以选择保存这些搜索并在出现适合他们搜索的新广告时收到电子邮件。问题就在这里:我们希望在每次发布广告时执行反向搜索。使用价格、位置、标题和描述作为参数,我们想要搜索所有保存的“搜索”并获取那些会找到广告的搜索。我想应该只在查询中执行 min- 和 maxprice,并使用一些 Quorom 语法来获取标题/描述中至少出现 2 次或 mby 1 次的所有广告。我们的问题主要在于地理搜索。我们如何找到“搜索圈”将包括我们新发布的位置的所有搜索,而不对每个保存的搜索执行搜索?

这是主要问题,也非常欢迎对我们对其他问题的建议解决方案提出任何评论。提前谢谢你/珍妮

【问题讨论】:

  • 就像“评论”一样 - 此类搜索的新兴术语是前瞻性搜索。这可能会帮助您找到相关的背景信息

标签: search sphinx


【解决方案1】:

sphinx 上的标准“地理搜索”支持在 Prospective Index 上应该与普通的回顾性搜索一样好。

已经为所有保存的搜索建立了一个狮身人面像“索引”......

并且您使用“广告”作为搜索查询运行查询:- 而不是使用固定半径的“过滤器”,您只需使用属性中的半径(即存储在特定查询中的半径) - 如果使用 API 不能直接使用 setFilterRange,需要使用 setSelect,新建一个虚拟属性。

$cl->setSelect("*,IF(@geodist<radius,1,0) as myfilter");
$cl->setFilter('myfilter',array(1));

(是的,min/maxprice 也可以使用普通过滤器完成 - 只需将逻辑反转为您将在回顾性搜索中使用的逻辑)

...复杂之处在于“全文”查询,如果保存的搜索不仅仅是一个关键字,但您似乎已经弄清楚了那部分。

【讨论】: