如何以百分比的形式获得mysql匹配的结果?

我在mysql中使用Match(Col1)Against(Val)。 从文章中选择匹配(body_var)的匹配(正文); 现在在完全匹配的情况下,我得到结果作为数字(例如14.43)。 这个数字是什么意思?主要问题是我能以百分比形式得到结果(例如0.94) 谢谢你的帮助     
已邀请:

bab

可能有一个更容易的方法来做到这一点..不知怎的,我在这一个堕下兔子洞..但它的测试和工作(返回结果的百分比)
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场比赛对358行进行了测试 50/350 = 0.1396648 ...(第一个结果) 圆形结果为0.14 如果您希望将相关性值转换为单个结果的百分比 - 它实际上不会发生...... 来自MATCH / AGAINST的相关性值不是百分比匹配的良好指标。这在互联网上有深度介绍。搜索“将相关性值转换为百分比”... 如果你想通过相关匹配百分比来订购你的结果,第一个结果总是100%相关,你可以这样做...... 至于尝试获取类似PHP的similar_text的值 - 您最好将该工作卸载到客户端... 全文搜索相关性是以?衡量的? http://forums.mysql.com/read.php?107,125239,146610#msg-146610 http://seminex.blogspot.com/2005/06/mysql-relevance-in-fulltext-search.html     
我想出的解决方法是找到最佳匹配,并使用它们来获得相对于这些最大值的百分比值,这在这种情况下可能不完全有用,但它肯定会给你一个想法。 我使用此方法查找重复项,首先我插入行然后我运行此查询,当然最好的匹配是同一行。 首先,我必须选择最佳匹配:
SELECT
MAX(MATCH (table.col1)  AGAINST ('text 1'  IN NATURAL LANGUAGE MODE)) AS  bscore_col1 ,
MAX(MATCH (table.col2) AGAINST ('text 2'                          
IN NATURAL LANGUAGE MODE)) AS bscore_col2
FROM table
ORDER BY bscore_name col1 DESC, bscore_col2 DESC) AS bests
您当然可以添加多个列,但必须首先创建相应的全文搜索索引。 完整查询从第一个查询中获取结果并将其用作参考,您可以更改0.5的比率,0.5表示获得的分数必须>最佳分数的50%,如果您想获得所有结果,请删除比较表达式。
SELECT *,
MATCH (table.col1) AGAINST ('text 1' IN NATURAL LANGUAGE MODE)/bests.bscore_col1 AS score_col1 ,
MATCH (table.col2) AGAINST ('text 2' IN NATURAL LANGUAGE MODE)/bests.bscore_col2 AS score_col2
FROM (table,
(SELECT
MAX(MATCH (table.col1)  AGAINST ('text 1'  IN NATURAL LANGUAGE MODE)) AS bscore_col1 ,
MAX(MATCH (table.col2) AGAINST ('text 2' IN NATURAL LANGUAGE MODE)) AS bscore_col2
FROM table
ORDER BY bscore_col2 DESC, bscore_col1 DESC) AS bests)
WHERE
MATCH (table.col1)  AGAINST ('text 1'  IN NATURAL LANGUAGE MODE)/bests.bscore_col1 > 0.5 AND
MATCH (table.col2) AGAINST ('text 2'IN NATURAL LANGUAGE MODE)/bests.bscore_col2 > 0.5
ORDER BY score_col2 DESC, score_col1 DESC
我不相信这是最好的解决方案,但在我的情况下它做得很好。     

要回复问题请先登录注册