MySQL - 使用标签制作一个(简单?)搜索引擎

问题描述 投票:0回答:1

我即将为我们未来的网站制作一个(简单?)搜索引擎,我想要一些有关问题的建议。

网站上的内容将有标签连接到它们,但我不知道如何以正确的方式存储它们。为了简单起见,1 个标题带有多个标签。我有两种解决方案,我想请您了解哪一种更好,或者说另一种解决方案;)

  1. 将标题存储在一个表中,将标签存储在另一表中。每个标签都有一个 titleId。当用户搜索某些内容时,数据库会在两个表中搜索并同时返回结果。 + 需要存储的数据更少。 - 在多个表中搜索

  2. 将标题存储在一个表中,将标签存储在另一表中。虽然每个标题都有一个与标题同名的标签。这样,数据库只需在一张表中进行搜索即可。

    • 只需在一张表中搜索即可。 - 要存储更多数据。

我说“性能就是一切”,但你觉得呢?

mysql search tags storage
1个回答
1
投票

您想要做的是使用多对多关系。有效的方法是使用连接表。这是我的设置方式

create table page (
  id int(11) not null auto_increment,
  title varchar(128)
  ...
) engine = innodb;

create table tag (
  id int(11) not null auto_increment,
  tag_name varchar(128)
) engine = innodb;

create table page_tag (
 id int(11) not null auto_increment,
 tag_id int(11) not null,
 page_id int(11) not null,
 foreign key(tag_id) references tag(id),
 foreign key(page_id) references page(id),
 unique key(tag_id, page_id)
) engine=innodb;

确保使用 innodb 表来强制引用完整性。如果您需要全文搜索,请添加一个额外的 myISAM 表,该表基本上复制您的标记表。 page_tag 中的唯一键可防止其中出现重复条目,并使该表上的联接更快。

我还想说你应该选择#2。这样你每次都搜索一张桌子,这可能更容易处理。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.