使用like实现查询的数据库搜索

pra*_*rat 3 mysql database search full-text-search

我打算通过一个网站实现数据库搜索 - 我知道mysql提供了全文搜索,但事实证明它不支持innodb引擎(我需要交易支持).其他选项使用sphinx或类似的索引应用程序.但是,它们需要对数据库结构进行一些重新分解,并且可能需要比我更多的时间来实现.

所以我决定采用每个表并将其所有相关列连接到一个新添加的QUERY列.此查询列还应从其他相关表的列中进行招募.

这完成后,我将使用要搜索的表的查询列上的'like'子句进行搜索以返回特定域(相关表组)的结果.

由于我的数据库预计不会太大(在最大的表中<100万行),我期待合理的查询时间.

有没有人同意这种方法或有更好的想法?

Bil*_*win 6

您将不满意使用LIKE和通配符的解决方案.它比使用全文搜索技术要慢几百或几千倍.

请参阅我的演示文稿MySQL中的实用全文搜索.

我建议不要将值复制到QUERY列中,而是将值复制到MyISAM表中,在该表中定义了FULLTEXT索引.您可以使用触发器来执行此操作.

您不需要将值连接在一起,只需要主键列和每个可搜索的文本列.

CREATE TABLE OriginalTable (
  original_id SERIAL PRIMARY KEY,
  author_id INT,
  author_date DATETIME,
  summary TEXT,
  body TEXT
) ENGINE=InnoDB;

CREATE TABLE SearchTable (
  original_id BIGINT UNSIGNED PRIMARY KEY, -- not auto-increment
  -- author_id INT,
  -- author_date DATETIME,
  summary TEXT,
  body TEXT,
  FULLTEXT KEY (summary, body)
) ENGINE=MyISAM;
Run Code Online (Sandbox Code Playgroud)