php - 在 MYSQL 数据库中存储和查询 hastags 的最有效方法是什么
问题描述
我正在构建我的 MYSQL 表,我正在使用 Laravel 构建一个平台,用户可以在其中上传包含描述的图像。此描述将包括主题标签。
现在我想知道存储描述和搜索它的最有效方法是什么。
最初,我想将描述作为一个整体存储在单个文本列中,并在为该列建立索引后进行简单的搜索。这将允许用户通过主题标签和通用词进行搜索。
然后我想知道提取主题标签并将其存储在自己的表中与照片 ID 相比是否更有效。如果它只能按标签搜索,但您也可以按常规词搜索,这个想法会很有效。
任何人都可以确认最好的方法可能是什么,甚至可以提出另一种方法。
谢谢
解决方案
如何存储数据取决于您希望如何访问数据。
如果您只想查看描述和哈希标签,那么您可以将它们放入一个未索引的字段中,并在每个图像的时间获取它们。
从您指定的内容来看,您似乎想要一个descriptions
可作为文本搜索的列。这可能足以满足您的目的。
但是,如果您希望能够专门提出有关哈希标签的问题,例如:
- 数据库中有哪些哈希标签,有多少?
- 特定图像或图像集上有哪些哈希标签?
- 两张图片有什么共同点?
- 哪些哈希标签“包含”其他哈希标签(即#cat 和#catamaran)?
然后,您将需要一个单独的哈希标签表。我的建议是将两者结合起来。就像是:
create table images (
imageId int auto_increment primary key,
description text,
createdAt datetime,
createdBy varchar(255),
fulltext (description)
);
create table imageHashtags as (
imageHashtagId auto_increment primary key,
imageId int not null,
hashtag varchar(255),
constraint fk_imagehashtags_imageid foreign key (imageid) references images(imageid),
index (hashtag)
);
您可能想要一个标签本身的参考表,因此它们不会在表中重复。没有足够的信息知道这是否是一个好方法。
推荐阅读
- android - Firebase Cordova Google 登录不起作用
- javascript - 直接到 .pdf 文件中的页面而不打开新选项卡
- apache-tomee - TomEE Plume 7.0.4 未部署不属于 org.superbiz 包的 REST 注释类
- python - 当遍历一个非常大的列表并每次迭代写入文件时,文件应该在循环中打开还是在循环外打开?
- java - 网站和安卓应用程序如何连接?
- filter - 找到给定故事下的所有缺陷和子任务?
- video - 令人困惑的问题 - FFmpeg 片段过滤器使视频不同步
- c# - 在 TableLayoutPanel 中交换控件位置
- python - Python - 是否可以在另一个实例方法中定义一个实例方法?
- android - 无法解决:com.google.android.gms:play-services-maps:15.6.1 安装存储库并同步项目在文件中显示在项目结构对话框中显示