标签建议(不是标签自动填充)

时间:2010-04-16 21:21:01

标签: sql autocomplete doctrine tagging autosuggest

AJAX自动完成功能非常简单。但是,我想知道如何在SO上处理这样的智能标签建议。

澄清自动填充建议之间的区别:

  • autocomplete :foo [foobar,foobaz]
  • 建议:foo [barfoo,foobar,foobaz],甚至更好,有“你的意思”功能:[barfoo,foobar,foobaz,fobar,fobaz]

我想我需要在标签中进行全文搜索(所有字母都被编入索引,而不仅仅是单词)。对于有限数量的标签(甚至客户端),使用正则表达式或其他模式是没有问题的。

但是如何为大量标签实现此功能?
是否有任何特殊原因(除了URL)SO上的标签是破折号的?标签中的Unicode字符怎么样?

我使用以下列将标记存储在表中:id,tagname。 我的SQL查询返回包含以下字段的对象:id,tagname,count

(我使用Doctrine ORM和pgsql作为默认的db驱动程序。)

1 个答案:

答案 0 :(得分:3)

我会在每个按键时通过REGEXP从数据库中选择它们。我在我的网站上做了这个并没有prefrormance问题(我没有重载服务器的想法)。如果您不喜欢这个想法,我会兑现所有1-5个字母组合,用户可以在单独的表格中每天输入并刷新它们。如果此表被索引,那么您的实现速度非常快。

详细说明第二个方面:

简要说明:1。制作一个表SEARCHTABLE,表示关键字(限制为3-4个字母)和标签的主要ID之间的1-n关系。 2.两个领域的指数。 3.每次用户进行搜索时,请查看SEARCHTABLE,如果组合在那里,请使用 - 非常快,因为所有内容都已编入索引。如果没有进行正则表达式搜索并将所有结果放入SEARCHTABLE。

注意:

  1. 如果是,您应该使表无效 你添加标签,但这应该很多 比搜索更少。什么时候 使表无效 necesarilly TRUNCATE它,你可以 轻松重建它 考虑到关键字。
  2. 如果你想加快速度,你可以“预生成”所有两个甚至三个 字母搜索。
  3. 如果你足够关心,你应该使用来自n-1个字母kewords的信息来生成 n个字母关键字。它极大地加速了事情。想象一下,用户输入了“mo” 并且您已经从SEARCHTABLE向他们展示了适当的结果。比她输入“n”时 给它“星期一”你只需要搜索已经选定的项目来生成新的 响应。
  4. 希望现在更加全面。