繁体   English   中英

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

[英]Replacement relevance sorting for MySQL fulltext in InnoDB tables?

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

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

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

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

谁能提出更好的方法? 我不想使用Sphinx等任何第三方软件

如果您不想使用其他引擎,则可以为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;

在MySQL 5.6(当前为beta,截至2012年4月)中,InnoDB表允许使用FULLTEXT索引,因此您可以对InnoDB事务,联接,外键等使用熟悉的MyISAM搜索语法。有关更多链接,请参见相关的StackOverflow问题

我来看看狮身人面像或Solr。 两者都比MyISAM具有更好的fts,也可以为您提供innoDB表。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM