4

我有一个MyISAM包含超过 200 万条记录的表,其中有FULLTEXT多个列的索引。

给定一个搜索词,我想知道它在每条记录的索引字段中出现了多少次。

例如,'test'在下表中搜索时(其中和列FULLTEXT都有索引):FREETEXTThird_Col

+----+-------------------------------------------- +---------------+
| 身份证 | 自由文本 | Third_Col |
+----+-------------------------------------------- +---------------+
| 1 | 这是测试示例中的第一个测试字符串。| 这是第一个测试值 |
| 2 | 这是第二次测试。| 这是 sec col |
+----+-------------------------------------------- +---------------+

我期望结果如下:

+----+-------+
| 身份证 | 计数 |
+----+-------+
| 1 | 3 |
| 2 | 1 |
+----+-------+

我知道在FULLTEXT索引中 MySQL 使用 dtf(该术语在文档中出现的次数);怎么能得到这个?

4

1 回答 1

2

像这样创建一个用户定义的函数

DELIMITER $$

CREATE FUNCTION `getCount`(myStr VARCHAR(1000), myword VARCHAR(100))
    RETURNS INT
    BEGIN
    DECLARE cnt INT DEFAULT 0;
    DECLARE result INT DEFAULT 1;

    WHILE (result > 0) DO
    SET result = INSTR(myStr, myword);
    IF(result > 0) THEN 
        SET cnt = cnt + 1;
        SET myStr = SUBSTRING(myStr, result + LENGTH(myword));
    END IF;
    END WHILE;
    RETURN cnt;    

    END$$

DELIMITER ;

然后您可以在查询中使用它,如下所示

select id, getCount(concat(FREETEXT, Third_col), 'test') from yourtable

希望能帮助到你

于 2013-07-26T19:23:49.043 回答