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

时间:2012-07-17 21:50:15

标签: mysql search tags storage solution

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

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

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

  2. 将标题存储在一个表中,将标记存储在另一个表中。虽然每个标题都有一个与标题同名的标签。这样,数据库就必须在一个表中搜索。

    • 只需在一张桌子中搜索。 - 更多数据存储。
  3. 我说“表现就是一切”,但您怎么看?

1 个答案:

答案 0 :(得分: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。这样你每次都可以搜索一张桌子,这可能更容易处理。