AIプログラムとかUnityゲーム開発について

探索や学習などを活用したAI系ゲームを作りたいと思います。

MariaDB5.5 + Mroongaで全文検索

借りてるServersManはCentOS7で既にMariaDB5.5が入ってますが、

以下を参考に
Linux Blog » Mroongaのインストール

yum install -y http://packages.groonga.org/centos/groonga-release-1.1.0-1.noarch.rpm
yum makecache
yum install -y mariadb-mroonga
yum install -y groonga-tokenizer-mecab

分かち書きmecabを使います。
engineが登録されたので、さっそく全文検索をやってみます。

テーブル作成は、

CREATE TABLE table_name(
   id INT PRIMARY KEY AUTO_INCREMENT,
   col VARCHAR(255),
   FULLTEXT INDEX (col)
 ) ENGINE = Mroonga COMMENT='default_tokenizer "TokenMecab"' DEFAULT CHARSET utf8;

全文検索エンジンはMroonga、字句解析はMecabを指定します。

GoogleNewsから適当にニュース記事を突っ込んでみました。


大統領を含む記事を検索します。

SELECT * FROM table_name WHERE MATCH(col) AGAINST('大統領' IN BOOLEAN MODE);
|  2 | ワシントン=吉野直也】トランプ次期米大統領は9日、娘婿で実業家のジャレッド・クシュナー氏を次期大統領上級顧問に起用すると発表した。同ポストは無任所で、内政から外交にわたりすべての政策や人事に関与できる。プリーバス次期首席補佐官、バノン次期首席戦略官・上級顧問らと連携しながらホワイトハウスを事実上仕切ることになる。

 「選挙戦と政権移行を通じて信頼するアドバイザーだった。かけがえのないメンバーだ」… |
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.02 sec)

はい、検索できました(^◇^)


ただし

SkinnedMesh2.sharedMesh.GetBlendShapeIndex("eye_smile");

みたいなデータに、
BlendShapeで検索してもヒットしない。
こういう場合はTokenBigramSplitSymbolAlphaDigitを字句解析に使うべきらしい。
TokenBigramでは連続したアルファベットは1つにまとめて切り出すらしいので。
ただ、分割すればするほどインデックスは大きくなるし、検索速度にも影響が出るのでトレードオフ
そんなに大規模じゃないなら、好きにすればいいんでしょうけど。

プログラム言語は、本来空白で分離されてるはずの英文がくっついて表現されることが多いので、東洋の言葉のようにわかち書きがいると思うと面白いですね(´・ω・`)
TokenBigramみたいにくっつく場合は小文字大文字で連結するので、検索用にあらかじめ切り込みをいれておいてもいいのかも。