【问题标题】:How to count word match in content mysql match against?如何计算内容mysql匹配中的单词匹配?
【发布时间】:2016-04-15 09:02:08
【问题描述】:

我想使用 match against 来查找文章,并计算有多少关键字匹配这篇文章。比如我的文章是‘今天天气很好’,我的关键词是‘今天很好’,那么计数应该是2,我该怎么做。当我使用下面的代码时,它计算有多少文章匹配,而不是文章中有多少关键字匹配。

<?php
SELECT COUNT(*) FROM table WHERE MATCH (article) AGAINST ('today nice');
?>

【问题讨论】:

    标签: php mysql


    【解决方案1】:

    请查看以下示例。

    1. 获取包含“today”和“nice”字样的计数

    SELECT COUNT(*) FROM table WHERE MATCH(article) AGAINST('+today +nice' IN BOOLEAN MODE);
    

    2. 获取包含单词“today”的计数,但如果它们还包含“nice”,则排名更高

    SELECT COUNT(*) FROM table WHERE MATCH(article) AGAINST('+today nice' IN BOOLEAN MODE);
    

    3. 获取包含“today”或“nice”字样的计数

    SELECT COUNT(*) FROM table WHERE MATCH(article) AGAINST('today nice' IN BOOLEAN MODE);
    

    更多详情,您可以骑MYSQL Documentation

    希望对您有所帮助!

    【讨论】:

    • 感谢您的回复。但我想计算一行中有多少单词匹配,你的例子是计算有多少行匹配。
    • 您的意思是“每行字段中的单词数”吗?
    【解决方案2】:

    'the' 替换为您要计算的子字符串值。将`text` 替换为您的列名。

    SELECT (LENGTH(`text`) - LENGTH(REPLACE(`text`, 'the', ''))) / LENGTH('the') AS total 
    FROM someTable;
    

    【讨论】:

      【解决方案3】:

      以下示例可能会有所帮助:

      mysql> select `id`, `url`, LENGTH(`url`) - LENGTH(REPLACE(`url`, '/', '')) as `number` from `url`;
      +----+-------------------------------+--------+
      | id | url                           | number |
      +----+-------------------------------+--------+
      |  1 | http://www.google.com         |      2 |
      +----+-------------------------------+--------+
      

      【讨论】:

        猜你喜欢
        • 2010-09-24
        • 1970-01-01
        • 1970-01-01
        • 2022-06-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多