sql - 标签建议(不是标签自动完成)

标签 sql autocomplete doctrine tagging autosuggest

AJAX 自动完成的实现相当简单。但是,我想知道如何处理这样的智能标签建议。

澄清自动完成建议之间的区别:

  • 自动完成:foo [foobar, foobaz]
  • 建议:foo [barfoo, foobar, foobaz],或者更好,带有“你是说吗”功能:[barfoo, foobar, foobaz, fobar, fobaz]

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

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

我将标签存储在具有以下列的表中:id、标签名。 我的 SQL 查询返回具有以下字段的对象:id、tagname、count

(我使用 Doctrine ORM 和 pgsql 作为默认数据库驱动程序。)

最佳答案

我会在每次按键时通过 REGEXP 从数据库中选择它们。我在我的网站上执行了此操作,并且没有预执行问题(我没有认为服务器负载很重)。如果您不喜欢这个想法,我会兑现用户输入的所有 1-5 个字母组合,并每天在单独的表中刷新它们。如果该表已建立索引,那么您的实现速度会非常快。

详细说明第二种方法:

简单地说: 1. 制作一个表 SEA​​RCHTABLE 表示关键字(限制为 3-4 个字母)和标签主 ID 之间的 1-n 关系。 2. 两个字段上的索引。 3. 每次用户进行搜索时,请查看搜索表,如果存在组合,则使用它 - 速度非常快,因为所有内容都已建立索引。如果没有,则进行正则表达式搜索并将所有结果放入 SEARCHTABLE。

注释:

  1. 如果出现以下情况,您应该使表格无效: 您添加标签,但这应该很多 比搜索频率低。什么时候 使您不做的表无效 必要时截断它,你可以 轻松重建它 考虑到关键词。
  2. 如果你想加快速度,你可以“预生成”所有两个甚至三个 字母搜索。
  3. 如果您足够关心,您应该使用 n-1 个字母关键词中的信息来生成 n 个字母的关键字。它极大地加快了速度。假设用户输入了“mo” 并且您已经向他们展示了 SEARHTABLE 的适当结果。比她输入“n”时 给它“mon”,您只需要搜索已经选定的项目即可生成新的 回复。

希望现在更加全面。

关于sql - 标签建议(不是标签自动完成),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2656172/

相关文章:

c# - 如何从另一个表中获取与另一个表中的名称或ID匹配的相同名称或ID

javascript - jquery中的自定义自动完成功能

java - 如何在实现 Filterable 接口(interface)的 AutocompleteTextView 中获取建议之前等待用户停止输入?

SQL(急速): How to pull locations within X mile radius of lat/lon pont

sql - 选择至少匹配 n 个条件中的 n-1 个的所有记录

php - 为什么这个查询返回 0 行?

php - "Couldn' t find class"Doctrine子查询

php - 改变 symfony 中的数据库( Doctrine )

php - 一次更新数据库中的多条记录

javascript - 如何强制 Materialise 自动完成文本流到新行?