标签: tagging

推荐用于标记或标记的SQL数据库设计

我听说过几种实现标记的方法; 使用TagID和ItemID之间的映射表(对我有意义,但它是否可以缩放?),向ItemID添加固定数量的可能TagID列(似乎是一个坏主意),将标记保留在逗号分隔的文本列中(声音疯了,但可以工作).我甚至听过有人推荐稀疏矩阵,但那么标签名称如何优雅地增长?

我错过了标签的最佳做法吗?

sql tags tagging database-design data-modeling

274
推荐指数
5
解决办法
8万
查看次数

标记数据库设计

您将如何设计数据库以支持以下标记功能:

  • 项目可以包含大量标签
  • 搜索标记有给定标记集的所有项目必须快速(项目必须包含所有标记,因此它是AND搜索,而不是OR搜索)
  • 创建/写入项目可能较慢以启用快速查找/读取

理想情况下,使用单个SQL语句查找使用(至少)一组n个给定标记标记的所有项目.由于要搜索的标签数量以及任何项目上的标签数量未知且可能很高,因此使用JOIN是不切实际的.

有任何想法吗?


谢谢你到目前为止的所有答案.

但是,如果我没有弄错的话,给出的答案显示了如何对标签进行OR搜索.(选择包含一个或多个n标签的所有项目).我正在寻找一个有效的AND搜索.(选择所有包含所有n个标签的项目 - 可能还有更多.)

sql tags tagging database-design

167
推荐指数
6
解决办法
7万
查看次数

在数据库中存储标签的最有效方法是什么?

我在我的网站上实现了一个类似于stackoverflow使用的标记系统,我的问题是 - 什么是存储标记的最有效方法,以便可以搜索和过滤它们?

我的想法是这样的:

Table: Items
Columns: Item_ID, Title, Content

Table: Tags
Columns: Title, Item_ID
Run Code Online (Sandbox Code Playgroud)

这太慢了吗?有没有更好的办法?

database tags tagging database-design

132
推荐指数
4
解决办法
9万
查看次数

如何实现标签系统

我想知道实现标签系统的最佳方法是什么,比如SO上使用的标签系统.我在想这个但是我无法想出一个好的可扩展解决方案.

我正在考虑拥有一个基本的3表解决方案:拥有一张tags桌子,一张articles桌子和一张tag_to_articles桌子.

这是解决这个问题的最佳解决方案,还是有替代方案?使用这种方法,表格会在时间上变得非常大,而且对于搜索而言,我认为这不是太有效.另一方面,查询执行速度并不重要.

algorithm tagging system

84
推荐指数
3
解决办法
3万
查看次数

你如何恢复到Git中的特定标签?

我知道如何在Git分支中恢复到较旧的提交,但是如何恢复到由标记指示的分支状态?我想象这样的事情:

git revert -bytag "Version 1.0 Revision 1.5"
Run Code Online (Sandbox Code Playgroud)

这可能吗?

tags git tagging revert

74
推荐指数
3
解决办法
8万
查看次数

验证Ruby on Rails中has_many项的数量

用户可以将标签添加到代码段:

class Snippet < ActiveRecord::Base

  # Relationships
  has_many :taggings
  has_many :tags, :through => :taggings
  belongs_to :closing_reason

end
Run Code Online (Sandbox Code Playgroud)

我想验证标签的数量:至少为1,最多为6.我如何做到这一点?谢谢.

validation tagging ruby-on-rails has-many

58
推荐指数
3
解决办法
3万
查看次数

集合成员的TTL

在Redis中是否可以设置TTL(生存时间)而不是特定键,而是设置成员?

我正在使用Redis文档提出的标签结构 - 数据是简单的键值对,标签是包含与每个标签对应的键的集合,例如

> SETEX id:id_1 100 'Lorem ipsum'
OK
> SADD tag:tag_1 id:id_1
(integer) 1
Run Code Online (Sandbox Code Playgroud)

密钥id:id_1将按预期到期,但我没有看到从tag:tag_1集合中删除相应成员的有效方法.

我提出的一种方法是使用包含脚本的cron作业,该脚本将定期从集合中删除过期的密钥 - 通过将所有标记名称添加到另一个集合然后遍历所有标记,然后对应于每个标记的所有ID并检查是否存在相应的密钥 - 如果不存在,则调用SREM.

我不认为这将是一种有效的方式,我可能希望保持标签尽可能干净,因为集合的大小可能会影响多个标签(SINTER)的搜索性能.有更"内部"的方式吗?

tagging set ttl redis

56
推荐指数
2
解决办法
3万
查看次数

在jekyll博客中支持标签的简单方法

我使用标准的jekyll安装来维护博客,一切都很顺利.除了我真的想标记我的帖子.

可以使用YAML前端标记帖子,但是如何为每个标签生成可以列出标签所有帖子的页面?

ruby tags tagging liquid jekyll

45
推荐指数
4
解决办法
1万
查看次数

如何获得匹配正则表达式标准的最后一个Git标记

我需要Git命令来获取/找到以 'v' 开头的最后一个标签以获得最后一个版本控制提交(我在开头用v标签标记下一个应用程序版本(例如:v0.9.1beta).

有什么办法吗?

regex tags git tagging find

43
推荐指数
6
解决办法
2万
查看次数

Django中的联盟和交叉

class Tag(models.Model):
  name = models.CharField(maxlength=100)

class Blog(models.Model):
  name = models.CharField(maxlength=100)
  tags =  models.ManyToManyField(Tag)
Run Code Online (Sandbox Code Playgroud)

简单的模型只是问我的问题.

我想知道如何以两种不同的方式使用标签查询博客.

  • 标记为"tag1"或"tag2"的博客条目: Blog.objects.filter(tags_in=[1,2]).distinct()
  • 标记为"tag1"和"tag2"的博客对象:
  • 标记为"tag1"和"tag2"的博客对象,没有其他内容:??

标签和博客仅用于示例.

python django tagging django-models django-views

31
推荐指数
4
解决办法
1万
查看次数