0

我有一个应用程序,人们可以在其中列出要出售/交换/赠送的东西,有 200 个字符的描述。我们称他们为卖家。

其他用户可以搜索东西——我们称他们为买家。

我有一个使用 Django、MySQL 和 Sphinx 进行文本搜索的系统。

假设买家正在寻找“T 恤”。他们没有得到任何他们想要的结果。我希望该应用程序让买家可以选择勾选“如果出现问题请告诉我”。

然后,当卖家列出“Quicksilver T 恤”时,这将触发对所有已保存搜索的反向搜索,以通知这些买家已列出与他们查询匹配的新项目。

显然,每次列出任何新项目(在循环中)以查找匹配项时,我都可以在每个保存的搜索上触发 Sphinx 搜索——但这将是疯狂和密集的。这是我想以理智的方式实现的效果-我该怎么做?

4

1 回答 1

2

你真的建立了一个反向索引!

将“搜索”存储在数据库中,并在其上建立索引。

因此,“T 恤”将是该索引中的一个文档。

然后,当提交新产品时,您针对该索引运行查询。使用 'Quorum' 语法甚至 match-any - 来获得只匹配一个关键字的匹配项。

因此,在您的示例中,查询将是"Quicksilver t-shirt"/1match QuicksilverOR t-shirt。但同样适用于更长的标题,甚至是整个描述。

该查询的结果将是匹配的(单个单词*)原始搜索列表。请注意,这还假设您将索引设置-视为单词字符。

  • *请注意,如果您允许更复杂的查询、多个关键字或否定以及 OR 括号、短语等,它会稍微复杂一些。但在这种情况下,反向搜索 jsut 会为您提供潜在匹配,因此您需要确认它仍然匹配。仍然有很多查询,但你不需要全部运行它

顺便说一句,我认为这些“反向”搜索的技术术语是Prospective Search http://en.wikipedia.org/wiki/Prospective_search

于 2013-04-19T14:47:29.343 回答