FlarumでCJK(中国語・日本語・韓国語)検索がうまくいかないときの対策

PHPのフォーラムソフトウェアであるFlarumで、CJK言語 (中国語・日本語・韓国語)の検索がうまくいかないときの対策に関する記事です。

Flarumが使う検索はMySQLの全文検索 (FULLTEXT)による検索になりますが、デフォルトのFULLTEXT INDEXだと英語を前提にした単語ベースの検索です。そのため、単語で区切りが難しいCJK言語では検索がうまくいきません。(部分一致での検索ができない)

これはFlarumのデータベーステーブルのFULLTEXT INDEXをngramベースのINDEXに変更することで改善することができます。

phpmyadminなど、Flarumのデータベースに対して、以下のSQLを実行します。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
USE YourFlarumDataBaseName; /* 自分のFlarumデータベース名 */
ALTER TABLE posts DROP INDEX content;
CREATE FULLTEXT INDEX content ON `posts` (`content`) WITH PARSER ngram;
ALTER TABLE discussions DROP INDEX title;
CREATE FULLTEXT INDEX title ON `discussions` (`title`) WITH PARSER ngram;
USE YourFlarumDataBaseName; /* 自分のFlarumデータベース名 */ ALTER TABLE posts DROP INDEX content; CREATE FULLTEXT INDEX content ON `posts` (`content`) WITH PARSER ngram; ALTER TABLE discussions DROP INDEX title; CREATE FULLTEXT INDEX title ON `discussions` (`title`) WITH PARSER ngram;
USE YourFlarumDataBaseName; /* 自分のFlarumデータベース名 */

ALTER TABLE posts DROP INDEX content;
CREATE FULLTEXT INDEX content ON `posts` (`content`) WITH PARSER ngram;

ALTER TABLE discussions DROP INDEX title;
CREATE FULLTEXT INDEX title ON `discussions` (`title`) WITH PARSER ngram;

SQLの実行が終わると、全文検索がngramパーサーを使用することになり日本語などCJK言語の検索でも部分検索ができるようになります。(投稿数が多いと処理に時間がかかる場合があります)

※ 出展
https://discuss.flarum.org/d/22321-improving-search-for-chinese-characters/15

作成者: kkc0923

KANOTYPE管理者。

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Loading...