我听说过几种实现标记的方法; 使用TagID和ItemID之间的映射表(对我有意义,但它是否可以缩放?),向ItemID添加固定数量的可能TagID列(似乎是一个坏主意),将标记保留在逗号分隔的文本列中(声音疯了,但可以工作).我甚至听过有人推荐稀疏矩阵,但那么标签名称如何优雅地增长?
我错过了标签的最佳做法吗?
您将如何设计数据库以支持以下标记功能:
理想情况下,使用单个SQL语句查找使用(至少)一组n个给定标记标记的所有项目.由于要搜索的标签数量以及任何项目上的标签数量未知且可能很高,因此使用JOIN是不切实际的.
有任何想法吗?
谢谢你到目前为止的所有答案.
但是,如果我没有弄错的话,给出的答案显示了如何对标签进行OR搜索.(选择包含一个或多个n标签的所有项目).我正在寻找一个有效的AND搜索.(选择所有包含所有n个标签的项目 - 可能还有更多.)
我在我的网站上实现了一个类似于stackoverflow使用的标记系统,我的问题是 - 什么是存储标记的最有效方法,以便可以搜索和过滤它们?
我的想法是这样的:
Table: Items
Columns: Item_ID, Title, Content
Table: Tags
Columns: Title, Item_ID
Run Code Online (Sandbox Code Playgroud)
这太慢了吗?有没有更好的办法?
我想知道实现标签系统的最佳方法是什么,比如SO上使用的标签系统.我在想这个但是我无法想出一个好的可扩展解决方案.
我正在考虑拥有一个基本的3表解决方案:拥有一张tags桌子,一张articles桌子和一张tag_to_articles桌子.
这是解决这个问题的最佳解决方案,还是有替代方案?使用这种方法,表格会在时间上变得非常大,而且对于搜索而言,我认为这不是太有效.另一方面,查询执行速度并不重要.
我知道如何在Git分支中恢复到较旧的提交,但是如何恢复到由标记指示的分支状态?我想象这样的事情:
git revert -bytag "Version 1.0 Revision 1.5"
Run Code Online (Sandbox Code Playgroud)
这可能吗?
用户可以将标签添加到代码段:
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.我如何做到这一点?谢谢.
在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)的搜索性能.有更"内部"的方式吗?
我使用标准的jekyll安装来维护博客,一切都很顺利.除了我真的想标记我的帖子.
我可以使用YAML前端标记帖子,但是如何为每个标签生成可以列出标签所有帖子的页面?
我需要Git命令来获取/找到以 'v' 开头的最后一个标签以获得最后一个版本控制提交(我在开头用v标签标记下一个应用程序版本(例如:v0.9.1beta).
有什么办法吗?
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)
简单的模型只是问我的问题.
我想知道如何以两种不同的方式使用标签查询博客.
Blog.objects.filter(tags_in=[1,2]).distinct()标签和博客仅用于示例.