Sphinx反向搜索 - 添加新项目时,对现有存储的关键字执行搜索

时间:2013-04-19 13:35:23

标签: full-text-search sphinx django-sphinx

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

其他用户可以搜索内容 - 让我们称之为买家。

我使用Django,MySQL和Sphinx进行文本搜索系统设置。

让我们说买家正在寻找“T恤”。他们没有得到他们想要的任何结果。我希望该应用程序能够让买家选中一个框来说“告诉我是否有问题”。

然后当卖家列出“Quicksilver T恤”时,这会触发所有已保存搜索的反向搜索,以通知买家已列出与其查询匹配的新商品。

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

1 个答案:

答案 0 :(得分:2)

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

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

因此'T恤'将成为该指数的一个文件。

然后,在提交新产品时,您将针对此索引运行查询。使用'Quorum'语法甚至匹配任意 - 来获取仅匹配一个关键字的匹配项。

因此,在您的示例中,查询将为"Quicksilver t-shirt"/1,这意味着匹配Quicksilvert-shirt。但同样适用于更长的标题,甚至整个描述。

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

  • *如果您允许更复杂的查询,多关键字或否定以及OR括号,短语等,请注意它稍微复杂一些。但在这种情况下,反向搜索jsut会为您提供潜在的匹配,因此您需要确认它仍然是火柴。仍然有很多查询,但你不需要在所有
  • 上运行它
不过,我认为这些“反向”搜索的技术术语是Prospective Search http://en.wikipedia.org/wiki/Prospective_search