2011-03-10 77 views
3

我在mysql中使用Match(Col1)Against(Val)如何以百分比的形式得到mysql匹配结果?

 
select match(body) against(body_var) from articles; 

现在如果完全匹配,我得到的结果是一个数字(例如14.43)。 这个数字是什么意思?而主要问题是可我得到的结果以百分比的形式(如0.94)
感谢您的帮助

+0

据我了解,当你在“50%匹配”之后的“有趣的猫”文本中搜索“猫”时,你希望得到0.50。但这是不可能的,因为在寻找“杜兰”时会出现“杜兰杜兰”的情况。据我所知,当你搜索“杜兰”时, “杜兰杜兰”可以获得更多的匹配点,即使你有一个单独的“杜兰”行。 – frail 2011-03-10 13:31:41

+0

@frail:我走了另一条路线......我在想,他看到所有行匹配的行的百分比...如果他只想要全文索引/列的匹配所代表的百分比 - 那么可以理解杜兰杜兰会获得更多的匹配点(因为它发生更多) – CarpeNoctumDC 2011-03-11 00:33:01

+0

感谢frail和CarpeNoctumDC ,,,但我在找什么是类似于PHP中的similar_text函数。再次感谢 – Alaa 2011-03-12 07:04:09

回答

1

有可能是一个更简单的方法来做到这一点..不知怎的,我就倒下了兔子洞这一个。但它的测试和工程(成果回报率)

SELECT (mthCount/ttlCount) AS mPercent 
FROM (
    SELECT COUNT(*) AS mthCount 
    FROM articles WHERE (
    MATCH(body) AGAINST(body_var) 
    ) 
) AS MCount JOIN (
    SELECT COUNT(*) AS ttlCount 
    FROM articles 
) AS TCount; 

它返回一个记录/同列mPercent

你也可以把它圆到小数点后两位...

导致
SELECT FORMAT((mthCount/ttlCount),2) AS mPercent 
FROM (
    SELECT COUNT(*) AS mthCount 
    FROM articles WHERE (
    MATCH(body) AGAINST(body_var) 
    ) 
) AS MCount JOIN (
    SELECT COUNT(*) AS ttlCount 
    FROM articles 
) AS TCount; 

正如我说..我用50场比赛 三百五十零分之五十零= 0.1396648 ......(对于第一个结果) 0.14,四舍五入的结果


测试它针对358行如果您正在寻找将相关性值转换为单个结果的百分比 - 它不会真的发生...

来自MATCH/AGAINST的相关性值不是百分比匹配的良好指标。互联网..搜索“将相关性值转换为百分比”...

如果你想订购您的结果通过relevence匹配%,其中第一个结果总是为100%relevence,你可以做到这一点...

至于试图让PHP之类的similar_text价值 - 你是更好地卸载的工作到客户端...

Full-text search relevance is measured in?

http://forums.mysql.com/read.php?107,125239,146610#msg-146610

http://seminex.blogspot.com/2005/06/mysql-relevance-in-fulltext-search.html

+0

谢谢,但这会给我的百分比与真实相似度无关。我非常感谢你的帮助,但这不是我所期待的。 – Alaa 2011-03-12 07:08:25