[Senna-dev 344] N-gramインデックスのSennaのAlter操作について

Back to archive index

taku miyamoto taku_miyam****@dwang*****
2006年 9月 20日 (水) 17:09:12 JST


お世話になっております。
宮本です。

何度も連投で大変失礼いたします。
また、長文にて失礼いたします。


このたびは、N-gram インデックスのみの Senna の Alter 操作について悩んだ
挙句、こちらに投稿させていただきました。


・MySQL-4.0.27
・Senna-0.8.1
・(Mecabなし)

という環境で、N-gramインデックス用のSennaをインストールさせていただき(イ
ンストール方法は、[Sena-dev]に記したような方法です)、以下のような操作を
行いました。

-------------------------------------------------------------------------
1)fulltext index using senna, ngram, no normalize なカラム "body" を持
つテーブル "articles" の作成

2)作成したテーブルにデータを insert し、全文検索ができること・インデッ
クスが正常に生成されていることを確認

3)alter table articles add で text カラム "" を "articles" に追加
-------------------------------------------------------------------------

上記を実行した後、再度(2)と同じ、検索クエリで検索を行うと検索結果が 0 
になっており、さらにインデックスを確認すると、NGRAM オプションが消え NORMALIZE
オプションが付与されたインデックスになっております。


以下は、実際に実験したデータとその結果になります。
(横に長いので少し整形してあります)


【テーブル作成・データ流し込み】

	mysql> create table articles(
	    ->     id int unsigned not null auto_increment primary key,
	    ->     body text,
	    ->     fulltext index using senna, ngram, no normalize (body)
	    -> );
	Query OK, 0 rows affected (0.07 sec)
	
	mysql>
	mysql> insert into articles values
	    ->    (null,"郵貯民営化は重要な問題だと思う "),
	    ->    (null,"スローライフを志向するiPodの強み - CNET Japan"),
	    ->    (null,"HTML, CSS, Photoshopを同時に学べるサンプル付きデザイン記事:Goodpic"),
	    ->    (null,"jazzanovaの日記 - 現在顧問弁護士に相談中であり、対応についても検討中"),
	    ->    (null,"mixi非公式ニュースサイト - mixiの問題人物Kusakabe氏、強制退会に?"),
	    ->    (null,"むだづかいにっき♂:ネット上で議論を仕掛ける事について"),
	    ->    (null,"はてな perl ハッカーの方々にお聞きします。近頃ますます良い感じ
なperlですが、どのような開発環境で開発していますでしょうか。"),
	    ->    (null,"シナトラ千代子 - 投げ銭が飛び交うなかでダイアリーに立てこもる
、という意味。"),
	    ->    (null,"Going My Way: Skypeの会話をPodcast用に録音する場合の設定方法"),
	    ->    (null,"Kusakabeさんがmixiの一部?を賑わしている。彼にmixi強制退会が
言い渡されたのだ。"),
	    ->    (null,"Ringo's Weblog: googleと競合しない方法2 "),
	    ->    (null,"Moleskin Diary - 投げ銭よりたれ銭"),
	    ->    (null,"第38回 海外メディアが伝えた小泉・郵政解散劇の評判 - nikkeibp.jp
- 立花隆の「メディア ソシオ-ポリティクス」"),
	    ->    (null,"ほその日記 - フォームが変更された事を知る"),
	    ->    (null,"総選挙はてなと公職選挙法:北海道に住む国家公務員日記 "),
	    ->    (null,"はてな、政党を株式に見立てて総選挙結果を予測 - CNET Japan");
	Query OK, 16 rows affected (0.05 sec)
	Records: 16  Duplicates: 0  Warnings: 0





【検索とインデックスの確認】

	mysql>
	mysql> select * from articles where match(body) against ('はてな');
	+----+-----------------------------------------------------------------
	| id | body                                                            
	+----+-----------------------------------------------------------------
	|  7 | はてな perl ハッカーの方々にお聞きします。近頃ますます良い感じな‥
	| 15 | 総選挙はてなと公職選挙法:北海道に住む国家公務員日記             
	| 16 | はてな、政党を株式に見立てて総選挙結果を予測 - CNET Japan       
	+----+-----------------------------------------------------------------
	3 rows in set (0.00 sec)
	
	mysql>
	mysql> show index from articles;
	+----------+------------+----------+--------------+-------------+-----------+‥
	| Table    | Non_unique | Key_name | Seq_in_index | Column_name | Collation |
	+----------+------------+----------+--------------+-------------+-----------+‥
	| articles |          0 | PRIMARY  |            1 | id          | A         |
	| articles |          1 | body     |            1 | body        | A         |
	+----------+------------+----------+--------------+-------------+-----------+‥
-------------+----------+--------+------+----------------------+---------+
 Cardinality | Sub_part | Packed | Null | Index_type           | Comment |
-------------+----------+--------+------+----------------------+---------+
          16 |     NULL | NULL   |      | BTREE                |         |
        NULL |     NULL | NULL   | YES  | FULLTEXT,SENNA,NGRAM |         |
-------------+----------+--------+------+----------------------+---------+
	2 rows in set (0.00 sec)




【カラムの追加(alter操作)】

	mysql>
	mysql> alter table articles add subject text;
	Query OK, 16 rows affected (0.09 sec)
	Records: 16  Duplicates: 0  Warnings: 0
	
	
	
	
【再度検索とインデックスの確認】
	
	mysql>
	mysql> select * from articles where match(body) against ('はてな');
	Empty set (0.00 sec)
	
	mysql>
	mysql> show index from articles;
	+----------+------------+----------+--------------+-------------+-‥
	| Table    | Non_unique | Key_name | Seq_in_index | Column_name |
	+----------+------------+----------+--------------+-------------+-‥
	| articles |          0 | PRIMARY  |            1 | id          |
	| articles |          1 | body     |            1 | body        |
	+----------+------------+----------+--------------+-------------+-‥
-----------+-------------+----------+--------+------+--------------------------+---------+
 Collation | Cardinality | Sub_part | Packed | Null | Index_type               | Comment |
-----------+-------------+----------+--------+------+--------------------------+---------+
 A         |          16 |     NULL | NULL   |      | BTREE                    |         |
 A         |        NULL |     NULL | NULL   | YES  | FULLTEXT,SENNA,NORMALIZE |         |
-----------+-------------+----------+--------+------+--------------------------+---------+
	2 rows in set (0.01 sec)
	
※ なぜか、NGRAMオプションが消えて、NORMALIZEオプションが付与される状態
になってしまいます。


以上、何かお心当たりのあるかたがいらっしゃいましたらご教示をよろしくお願
いいたします。






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