ashib****@yahoo*****
ashib****@yahoo*****
2008年 1月 15日 (火) 14:27:14 JST
はじめまして。渋谷です。 表題の件について質問させてください。 http://lists.sourceforge.jp/mailman/archives/senna-dev/2007-August/000663.html の「 NGRAM での英数字の部分一致検索について」にかぶるところがあるかも知れません。 実際には井上さんが構築された環境を使って、全文一致検索について検証しているのですが 取得したいデータがとれない場合があるのでご相談です。 全角、反感の英字で、ヒットする場合とヒットしない場合とが、入力されるデータによって変化してしまいます。 例としましては、以下の3つのテーブルを作成して、データを挿入します。 ****************** CREATE TABLE t1 (c1 TEXT, FULLTEXT INDEX ft USING NGRAM (c1)) ENGINE = MyISAM DEFAULT CHARSET utf8; INSERT INTO t1 (c1) VALUES("極めるMySQLの技"); INSERT INTO t1 (c1) VALUES("極めるMySQLの技"); INSERT INTO t1 (c1) VALUES("こういう人がいいね!PHPでMySQLを使ってWEBサーバ構築"); INSERT INTO t1 (c1) VALUES("こういう人がいいね!phpでMySQLを使ってwebサーバ構築"); INSERT INTO t1 (c1) VALUES("VB6.0とSQL、Oracle!今日から朝は元気に6時に起きようと思ったのですが、結局起きれませんでした。。無念。明日は7:30からジムでトレーニングなので、なにがなんでも起きないとだめですねー。そろそろお昼にしますか"); INSERT INTO t1 (c1) VALUES("VB6.0とSQL、Oracle!今日から朝は元気に6時に起きようと思ったのですが、結局起きれませんでした。。無念。明日は7:30からジムでトレーニングなので、なにがなんでも起きないとだめですねー。そろそろお昼にしますか"); INSERT INTO t1 (c1) VALUES("JAVAかCOBOL開発経験。SQLによるDBアクセス経験。♪今日の朝は納豆ゴハン2杯"); INSERT INTO t1 (c1) VALUES("JAVAかCOBOL開発経験。SQLによるDBアクセス経験。♪今日の朝は納豆ゴハン2杯"); commit; ***************************************** CREATE TABLE t2 (c1 TEXT, FULLTEXT INDEX ft USING NGRAM (c1)) ENGINE = MyISAM DEFAULT CHARSET utf8; INSERT INTO t2 (c1) VALUES("極めるMySQLの技"); INSERT INTO t2 (c1) VALUES("極めるMySQLの技"); INSERT INTO t2 (c1) VALUES("JAVAかCOBOL開発経験。SQLによるDBアクセス経験。♪今日の朝は納豆ゴハン2杯"); INSERT INTO t2 (c1) VALUES("JAVAかCOBOL開発経験。SQLによるDBアクセス経験。♪今日の朝は納豆ゴハン2杯"); INSERT INTO t2 (c1) VALUES("こういう人がいいね!PHPでMySQLを使ってWEBサーバ構築"); INSERT INTO t2 (c1) VALUES("こういう人がいいね!phpでMySQLを使ってwebサーバ構築"); commit; ************************************** CREATE TABLE t3 (c1 TEXT, FULLTEXT INDEX ft USING NGRAM (c1)) ENGINE = MyISAM DEFAULT CHARSET utf8; INSERT INTO t3 (c1) VALUES("極めるMySQLの技"); INSERT INTO t3 (c1) VALUES("極めるMySQLの技"); INSERT INTO t3 (c1) VALUES("こういう人がいいね!PHPでMySQLを使ってWEBサーバ構築"); INSERT INTO t3 (c1) VALUES("こういう人がいいね!phpでMySQLを使ってwebサーバ構築"); INSERT INTO t3 (c1) VALUES("JAVAかCOBOL開発経験。SQLによるDBアクセス経験。♪今日の朝は納豆ゴハン2杯"); INSERT INTO t3 (c1) VALUES("JAVAかCOBOL開発経験。SQLによるDBアクセス経験。♪今日の朝は納豆ゴハン2杯"); commit; ここで、PHPとPHPで検索した場合、 どのテーブルも、以下の2件がヒットし、問題はありません。 +-----------------------------------------------------------------------------------------------+ | c1 & nbsp; | +-----------------------------------------------------------------------------------------------+ | こういう人がいいね!PHPでMySQLを使ってWEBサーバ構築 | | こういう人がいいね!phpでMySQLを使ってwebサーバ構築 | +-----------------------------------------------------------------------------------------------+ ですが、JAVA、JAVAで検索した場合、t2以外のテーブルは、半角のデータしかヒットしなくなります。 **************************************** mysql> select c1 from t1 where match(c1) against('JAVA'); +-----------------------------------------------------------------------------------------------------+ | c1 & nbsp; | +-----------------------------------------------------------------------------------------------------+ | JAVAかCOBOL開発経験。SQLによるDBアクセス経験。♪今日の朝は納豆ゴハン2杯 | +-----------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec) mysql> select c1 from t1 where match(c1) against('JAVA'); +-----------------------------------------------------------------------------------------------------+ | c1 & nbsp; | +-----------------------------------------------------------------------------------------------------+ | JAVAかCOBOL開発経験。SQLによるDBアクセス経験。♪今日の朝は納豆ゴハン2杯 | +-----------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec) mysql> select c1 from t2 where match(c1) against('JAVA'); +-----------------------------------------------------------------------------------------------------------------------------------+ | c1 & nbsp; ; | +-----------------------------------------------------------------------------------------------------------------------------------+ | JAVAかCOBOL開発経験。SQLによるDBアクセス経験。♪今日の朝は納豆ゴハン2杯 & nbsp; | | JAVAかCOBOL開発経験。SQLによるDBアクセス経験。♪今日の朝は納豆ゴハン2杯 | +-----------------------------------------------------------------------------------------------------------------------------------+ 2 rows in set (0.00 sec) mysql> select c1 from t2 where match(c1) against('JAVA'); +-----------------------------------------------------------------------------------------------------------------------------------+ | c1 & nbsp; ; | +-----------------------------------------------------------------------------------------------------------------------------------+ | JAVAかCOBOL開発経験。SQLによるDBアクセス経験。♪今日の朝は納豆ゴハン2杯 & nbsp; | | JAVAかCOBOL開発経験。SQLによるDBアクセス経験。♪今日の朝は納豆ゴハン2杯 | +-----------------------------------------------------------------------------------------------------------------------------------+ 2 rows in set (0.00 sec) mysql> select c1 from t3 where match(c1) against('JAVA'); +-----------------------------------------------------------------------------------------------------+ | c1 & nbsp; | +-----------------------------------------------------------------------------------------------------+ | JAVAかCOBOL開発経験。SQLによるDBアクセス経験。♪今日の朝は納豆ゴハン2杯 | +-----------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec) mysql> select c1 from t3 where match(c1) against('JAVA'); +-----------------------------------------------------------------------------------------------------+ | c1 & nbsp; | +-----------------------------------------------------------------------------------------------------+ | JAVAかCOBOL開発経験。SQLによるDBアクセス経験。♪今日の朝は納豆ゴハン2杯 | +-----------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec) **************************************** 入力データに問題があるのか、それともSQL文を工夫しなくてはならないのか、という点をご教授いただけないでしょうか。 コンパイルでは、 バージョンは、下記の2パターンで試しています。※どちらのバージョンも結果は同じでした。 両方とも、http://lists.sourceforge.jp/mailman/archives/senna-dev/2007-August/000664.html での指摘のとおりコメントアウトしてコンパイルしたものです。 senna-1.0.8 mysql-5.0.45-tritonn-1.0.4 senna-1.0.9 mysql-5.0.51-tritonn-1.0.8 よろしくお願いいたします。 --------------------------------- Easy + Joy + Powerful = Yahoo! Bookmarks x Toolbar