InnoDB表中MySQL全文的替换相关性排序?

时间:2010-03-30 14:08:21

标签: php mysql innodb

我正在使用MySQL InnoDB并希望在某些列上进行全文样式搜索。按相关顺序对结果进行排序的最佳方法是什么?

我正在尝试做类似的事情:

SELECT columns,   
(LENGTH(column_name) - LENGTH(REPLACE(column_name, '%searchterm%', ''))) AS score
FROM table
WHERE column_name LIKE '%searchterm%'
ORDER BY score

但是,一旦我开始搜索超过1列或使用多个关键字,这将变得非常复杂。我已经有几个连接发生了,所以简化了上面的查询。

有人能建议更好的方法吗?我不想使用像Sphinx等任何第三方软件

3 个答案:

答案 0 :(得分:3)

如果您不想使用其他引擎,可以创建InnoDB表的“影子”MyISAM副本,并对其进行全文搜索。使用InnoDB表上的一些适当的触发器,您可以相对容易地更新MyISAM副本。为了防止InnoDB端记录消失的可能性,请对InnoDB表进行联接。类似的东西:

SELECT MATCH(myisamtable.field1, myisamtable.field2, myisamtable.field3)
        AGAINST ('search terms') AS relevance,
    mysitamtable.field1, myisamtable.field2, myisamtable.field3
FROM myistamtable
RIGHT JOIN innodbtable ON myistamtable.commonID = innodbtable.commonID
WHERE (innodbtable.commonID IS NOT NULL) AND (MATCH(myisamtable.field1, myisamtable.field2, myisamtable.field3) AGAINST ('search terms') IN BOOLEAN MODE)
ORDER BY relevance DESC;

答案 1 :(得分:1)

我会看看Sphinx或Solr。两者都有比MyISAM更好的fts,也可以为你的innoDB表工作。

答案 2 :(得分:1)

在MySQL 5.6中(目前处于测试版,截至2012年4月),InnoDB表允许使用FULLTEXT索引,因此您可以使用熟悉的MyISAM搜索语法和InnoDB事务,连接,外键等。有关更多链接,请参阅this related StackOverflow question