[Senna-dev 449] Re: senna0.8.2+MySQL5.0.24+phpでの2ind-patchの挙動

Back to archive index

Katsuya Utada utada****@themi*****
2007年 2月 1日 (木) 15:01:21 JST


こんにちは、うただです

便乗で質問させて下さい。
2ind patchの説明の中で
*MySQLが全文検索用のインデックスと通常のインデックスの両方を併用
 できるように2ind-patchパッチが使用できます。
とありますが、同時に併用できるSennaインデックスの数には制限は
あるでしょうか。

たとえば下記の例で
SELECT * FROM indexer force index(index_indexer_regist)
 WHERE MATCH(indexer_description) AGAINST('海')
   and MATCH(indexer_description_org) AGAINST('山')
   and MATCH(indexer_body) AGAINST('川')
 ORDER BY indexer_regist;
のようなクエリは使えるのかなと思ったのです。

無理だと思ってたのですが当方で試したらできてしまいました。
但しexplainでは一つのfulltext indexしか使われていないよう
に見えました(これはexplainの問題かもしれませんが)。


On Wed, 03 Jan 2007 06:22:00 +0900, Tasuku SUENAGA wrote:
 |末永です。
 |
 |SHOW CREATE TABLEの結果を見ると、
 |indexer_registというカラムに対するインデックスの名前は、
 |index_indexer_registのようです。
 |
 |よって、
 |SELECT * FROM indexer force index(indexer_regist)
 | WHERE MATCH(indexer_description) AGAINST('海')
 | ORDER BY `indexer_regist` LIMIT 1,10;
 |ではなく、
 |SELECT * FROM indexer force index(index_indexer_regist)
 | WHERE MATCH(indexer_description) AGAINST('海')
 | ORDER BY `indexer_regist` LIMIT 1,10;
 |というクエリを投げる必要があります。
 |
 |yuji tomita wrote:
 |> お世話になっております。富田です。
 |> 
 |>> 1.PHPからmysql関数およびmysqli関数を使用して該当SQLを発行すると、前述
 |> のエラー発生。
 |>> 2.Perl/CGIからDBIを通して該当SQLを発行すると、前述のエラー発生。
 |>> 3.コマンドラインからmysqlにログインして実行した場合、正常動作。
 |>> 4.phpMyAdminで該当SQLを発行した場合、正常動作。
 |> 
 |>> クライアントによって挙動が違う場合として、
 |>> MySQLにわたってくる文字コードが違う場合が考えられます。
 |> 一般ログでは、1と4は全く同じクエリを投げた事になっており、文字化けが
 |> 確認できませんでした。しかし1の場合は下記エラーをPHPが受け取っています。
 |> Can't find FULLTEXT index matching the column list
 |> 
 |> ------------------------------------------------------------------------
 |> ・show create table indexer;の結果
 |> | indexer |CREATE TABLE `indexer` (
 |>   `entry_id` int(11) DEFAULT NULL,
 |>   `indexer_url` varchar(200) NOT NULL,
 |>   `indexer_title` varchar(200) NOT NULL,
 |>   `indexer_description` text NOT NULL,
 |>   `indexer_description_org` text NOT NULL,
 |>   `indexer_body` text NOT NULL,
 |>   `indexer_subject` varchar(400) NOT NULL,
 |>   `indexer_copyright` varchar(400) NOT NULL,
 |>   `indexer_movie_flg` tinyint(1) NOT NULL,
 |>   `indexer_podcast_flg` tinyint(1) NOT NULL,
 |>   `indexer_service` varchar(100) NOT NULL,
 |>   `indexer_author` varchar(400) NOT NULL,
 |>   `indexer_pubdate` varchar(30) NOT NULL,
 |>   `indexer_regist` datetime NOT NULL,
 |>   `indexer_update` datetime NOT NULL,
 |>   `indexer_site_id` int(11) DEFAULT NULL,
 |>   UNIQUE KEY `entry_id` (`entry_id`),
 |>   KEY `index_indexer_url` (`indexer_url`),
 |>   KEY `index_indexer_title` (`indexer_title`),
 |>   KEY `index_indexer_regist` (`indexer_regist`),
 |>   KEY `index_indexer_update` (`indexer_update`),
 |>   FULLTEXT KEY `indexer_description` (`indexer_description`),
 |>   FULLTEXT KEY `indexer_description_org` (`indexer_description_org`),
 |>   FULLTEXT KEY `indexer_body` (`indexer_body`)
 |> ) ENGINE=MyISAM DEFAULT CHARSET=utf8 |
 |> ------------------------------------------------------------------------
 |> 
 |> ・Sennaのインデックスを張る際のSQL文
 |> 上記のcreate文の通りです。
 |> 
 |> ------------------------------------------------------------------------
 |> ・/var/senna/senna.confの内容
 |> DEFAULT_ENCODING utf8
 |> 
 |> ------------------------------------------------------------------------
 |> ・mecabインストールログ
 |> 文字コードはutf-8(辞書構築時に指定)
 |> ------------------------------------------------------------------------
 |> 
 |> 恐れ入りますが、よろしくお願いいたします。
 |_______________________________________________
 |Senna-dev mailing list
 |Senna****@lists*****
 |http://lists.sourceforge.jp/mailman/listinfo/senna-dev
 |
 |

---
Katsuya Utada <utada****@themi*****>




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