【问题标题】:MySQL, PHP Relative search results / OptimizationMySQL、PHP 相对搜索结果/优化
【发布时间】:2012-03-20 17:20:25
【问题描述】:

我了解带有通配符等的 LIKE 结果。我需要知道的是一种获得最相关搜索结果的好方法。

例如: 我搜索“Front Brake CarModel”或类似的东西。

目前我用空格分解字符串并创建一个加法 OR/WHERE 状态,因此查询看起来像这样。

SELECT * FROM table WHERE article_text LIKE '%Front%' OR article_text LIKE '%Brake%' OR article_text LIKE '%CarModel%'

由于我的新手搜索技能,这不是很好,因为它会为搜索词中的每个单词获得结果。我想要做的是得到结果并与顶部找到最多单词的文章进行排序。如果这是有道理的。

建议?

编辑:表是 InnoDB 类型,由于外键限制而无法更改类型。因此消除了我使用 FULLTEXT 索引的能力:(

【问题讨论】:

  • Is Full Text search the answer? 的可能重复项
  • @MarcusAdams 不幸的是没有。我的表是 InnoDB,无法更改类型。所以我不能使用 FULLTEXT 索引。
  • 那么为什么不创建一个只包含搜索文本的新表,以及作为 MyIASM 的“真实”表的键?

标签: php mysql optimization


【解决方案1】:

这可以通过全文索引轻松完成。

ALTER TABLE table ADD FULLTEXT INDEX `ft_search` (`article_text`);

SELECT *, MATCH(article_text) AGAINST('Front Brake CarModel') AS score
FROM table
WHERE MATCH(article_text) AGAINST('Front Brake CarModel') ORDER BY score DESC;

【讨论】:

  • 这看起来很有希望,但是我使用的表似乎不支持 FULLTEXT 索引。 "使用的表类型不支持 FULLTEXT 索引"
  • 您没有使用 MyISAM 引擎。您的表很可能是 InnoDB。使用ALTER TABLE table ENGINE=MyISAM更换引擎,然后重试。
  • 如果您使用的是 innodb 表,而不是将表更改为 myisam,我通常只将全文索引所需的列移动到单独的 myisam 表中。
猜你喜欢
  • 1970-01-01
  • 2011-10-18
  • 1970-01-01
  • 1970-01-01
  • 2012-05-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多