我正在使用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等任何第三方软件
答案 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