[groonga-dev,02209] 文字列以外の条件を追加してパフォーマンスを出す方法

Back to archive index

番場岳郎 yakin****@gmail*****
2014年 4月 10日 (木) 14:48:46 JST


番場と申します。

現在、mroongaを利用し、システムを構築していますが全文検索条件に他の条件を
追加してパフォーマンスを出す方法で躓いています。

■環境
mroonga4.0.0 ラッパーモード
mysql 5.5.36-log

■テーブル定義
CREATE TABLE zzzz(
    xcode int NOT NULL AUTO_INCREMENT,
    ycode varchar(8) NOT NULL,
    updatedate datetime NOT NULL,
    acode int NOT NULL,
    bcode int NOT NULL,
    ccode int NOT NULL,
    dcode varchar(30) NOT NULL,
    titletext varchar(500) NOT NULL,
    maintext longtext NOT NULL,
    PRIMARY KEY (xcode),
    INDEX idx1 (ccode, dcode),
    FULLTEXT INDEX midx1 (titletext) COMMENT 'parser "TokenMecab",
normalizer "NormalizerMySQLUnicodeCIExceptKanaCIKanaWithVoicedSoundMark"',
    FULLTEXT INDEX midx2 (maintext) COMMENT 'parser "TokenMecab",
normalizer "NormalizerMySQLUnicodeCIExceptKanaCIKanaWithVoicedSoundMark"',
    FULLTEXT INDEX midx3 (titletext, maintext) COMMENT 'parser
"TokenMecab", normalizer
"NormalizerMySQLUnicodeCIExceptKanaCIKanaWithVoicedSoundMark"'
) ENGINE = mroonga COMMENT = 'engine "innodb"' DEFAULT CHARSET utf8mb4
COLLATE = utf8mb4_unicode_ci;

※INDEXは上記に加えて検索条件のパターン分追加したりしています。

■SQL
SELECT *
 FROM zzzz WHERE MATCH (titletext, maintext) AGAINST ('+東京' IN BOOLEAN MODE)
 AND ccode = 0 AND dcode <> '99'
 ORDER BY xcode DESC
 LIMIT 0,200;

検索条件によって日時範囲指定や各code一致などがいろいろなパターンでWHERE句に追加される作りです。
全文検索部分が無いパターンもあり、その場合のためにINDEXを複数はっています。
(上記テーブル定義では省略しています)
ORDER BYは必ずつきます。(PKもしくはupdatedateで降順)

全文検索を使用する場合、FULLTEXT INDEXにtextカラム以外は指定していないので
条件次第で当然遅くなります。ORDER BY(Sorting result)が一番のネックです。
このような場合、どのようにINDEXを設定するとよいのでしょうか。(もしくは他の方法?)
ちなみに、全文検索のみで実行すると早いです。

以上、よろしくお願いいたします。

番場
yakin****@gmail*****



groonga-dev メーリングリストの案内
Back to archive index