4

MyISAM200 万を超えるレコードで構成されるテーブルがあり、複数FULLTEXTの列にインデックスがあります。

与えられた検索語が、各レコードのインデックス付きフィールド内で何回発生するかを知りたいです。

たとえば'test'、次のテーブル内を検索する場合 (と列FULLTEXTの両方にインデックスがある):FREETEXTThird_Col

+----+------------------------------------------------ + ---------------------------+
| | ID | フリーテキスト | 3 番目の列 |
+----+------------------------------------------------ + ---------------------------+
| | 1 | これは、テスト例の最初のテスト文字列です。| | これは最初のテストです。
| | 2 | これは2回目のテストです。| | これは第 2 列です |
+----+------------------------------------------------ + ---------------------------+

次のような結果が期待されます。

+----+---------+
| | ID | カウント |
+----+---------+
| | 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 に答える