【问题标题】:What is the most efficient way of storing and querying for hastags in a MYSQL database在 MYSQL 数据库中存储和查询主题标签的最有效方法是什么
【发布时间】:2019-05-25 12:40:53
【问题描述】:

我正在构建我的 MYSQL 表,我正在使用 Laravel 构建一个平台,用户可以在该平台上上传包含描述的图像。此描述将包括主题标签。

现在我想知道存储描述和搜索它的最有效方法是什么。

最初我想将描述作为一个整体存储在单个文本列中,并在为该列建立索引后进行简单搜索。这将允许用户通过主题标签和通用词进行搜索。

然后我想知道提取主题标签并将其存储在自己的表中与照片 ID 相比是否更有效。如果它只能按标签搜索,但您也可以按常规词搜索,这个想法会很有效。

任何人都可以确认最好的方法可能是什么,甚至可以建议另一种方法。

谢谢

【问题讨论】:

  • 最好有它。甚至 Stackoverflow 也有一个标签表。 data.stackexchange.com/stackoverflow/query/new
  • 恐怕像 MySQL 这样的关系数据库管理系统不是为文本搜索而设计的。您可能需要一个全文搜索引擎,例如 Lucene 或 Solr 或 ElasticSearch

标签: php mysql sql laravel


【解决方案1】:

存储数据的方式取决于您希望访问数据的方式。

如果您只想查看描述和哈希标签,那么您可以将它们放入一个未索引的字段中,并在每个图像时获取它们。

根据您的说明,您似乎想要一个可作为文本搜索的 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)
);

您可能想要一个标签本身的参考表,因此它们不会在表中重复。没有足够的信息来判断这是否是一个好方法。

【讨论】:

    猜你喜欢
    • 2010-09-24
    • 2016-09-02
    • 1970-01-01
    • 2017-01-12
    • 2015-08-01
    • 2016-05-29
    • 2013-03-03
    • 2021-04-21
    • 1970-01-01
    相关资源
    最近更新 更多