From asari.takashi @ gmail.com Fri Jan 4 08:06:20 2008 From: asari.takashi @ gmail.com (Takashi ASARI) Date: Fri, 4 Jan 2008 08:06:20 +0900 Subject: [Senna-dev 745] =?iso-2022-jp?b?THVkaWEgLyBTZW5uYSAbJEIkThsoQiBtZWNhYiA=?= =?iso-2022-jp?b?GyRCJE4laiVzJS8kSyREJCQkRhsoQg==?= Message-ID: <5d04aefa0801031506t327fc36ga7ee8b55c0c76806@mail.gmail.com> こんにちは。浅利といいます。初めての投稿となります。よろしくお願いいたします。 Ludia と Senna とで、 MeCab のリンク先が異なる状態に なっていることに気づいたので、ご報告しておきます。 私の環境では MeCab が複数インストールされています。 ( まったくの余談ですが、私にとっては PostgreSQL も MySQL も Hyper Estraier も Apache も、なんでも複数インストールされがちです。) $ ~/local/mecab/bin/mecab --version mecab of 0.96 $ /usr/bin/mecab --version mecab of 0.95 一方、前者の MeCab を利用して作られた Senna の senna-cfg は以下のようになります。 $ ~/local/senna/bin/senna-cfg --libs -L/home/asari/local/senna/lib -lmecab この状態で Ludia をコンパイルすると、 Ludia では意図しない MeCab が使われてしまうことになります。 $ ldd ~/local/pg825/lib/postgresql/pgsenna2.so libmecab.so.1 => /usr/lib/libmecab.so.1 (0x00c96000) libsenna.so.0 => /home/asari/local/senna/lib/libsenna.so.0 (0x00b76000) libc.so.6 => /lib/tls/libc.so.6 (0x00512000) libpthread.so.0 => /lib/tls/libpthread.so.0 (0x008c2000) libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00111000) libm.so.6 => /lib/tls/libm.so.6 (0x00b3a000) libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x001dc000) /lib/ld-linux.so.2 (0x00272000) $ ldd ~/local/senna/lib/libsenna.so libmecab.so.1 => /home/asari/local/mecab/lib/libmecab.so.1 (0x003d1000) libc.so.6 => /lib/tls/libc.so.6 (0x0096e000) libpthread.so.0 => /lib/tls/libpthread.so.0 (0x00111000) libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00123000) libm.so.6 => /lib/tls/libm.so.6 (0x001ee000) libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x0059f000) /lib/ld-linux.so.2 (0x00272000) 対策としては、 以下が考えられると思います。 1. senna-cfg が MeCab のリンク情報も出力するようにする 2. senna-cfg は -lmecab さえも出力しない (と、どうなるんだろう?) 3. Ludia の configure オプションとして --with-mecab-config を受け付けるようにする 私としましては、なんとなく 1. がいいのではないかと思っています。 いい例が思いつかなかったのですが、私に馴染み深い Fink という特殊な状況下で 変な場所にインストールされる二つのライブラリの例を挙げさせてください。 $ PKG_CONFIG_PATH=/sw/lib/pango-ft219/lib/pkgconfig:/sw/lib/freetype219/lib/pkgconfig $ export PKG_CONFIG_PATH $ pkg-config freetype2 --libs -L/sw/lib/freetype219/lib -lfreetype -lz $ pkg-config pangoxft --libs -L/sw/lib/pango-ft219/lib -L/sw/lib/fontconfig2/lib -L/sw/lib/freetype219/lib -L/usr/X11R6/lib -L/sw/lib -lpangoxft-1.0 -lXft -lXrender -lpangoft2-1.0 -lfontconfig -lfreetype -lz -lpango-1.0 -lm -lgobject-2.0 -lgmodule-2.0 -lglib-2.0 -lintl -liconv freetype2 に依存している pangoxft の出力は、 freetype2 の出力を包含しています。 試しに senna-cfg を編集して MeCab のリンク情報を出力するようにしてみたところ、 意図した MeCab を使うことができています。 $ ldd ~/local/pg825/lib/postgresql/pgsenna2.so libmecab.so.1 => /home/asari/local/mecab/lib/libmecab.so.1 (0x00a39000) libsenna.so.0 => /home/asari/local/senna/lib/libsenna.so.0 (0x00ecc000) libc.so.6 => /lib/tls/libc.so.6 (0x0063c000) libpthread.so.0 => /lib/tls/libpthread.so.0 (0x00805000) libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00111000) libm.so.6 => /lib/tls/libm.so.6 (0x001dc000) libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x0034b000) /lib/ld-linux.so.2 (0x00272000) 実のところ、ここまで書いておいてなんですが、 (使おうとしてはいますが) 今までに実際に Ludia を使っているわけではありません。 ldd の出力が変わったからと言ってどのように動作が変わるかは検証していません。 どうということはないのかもしれません。 当方コンパイルが趣味のようなものなので、つい投稿してしまいました。 失礼いたします。 -- ASARI Takashi @ Todai Fink Team http://fink.sodan.ecc.u-tokyo.ac.jp/ From asari.takashi @ gmail.com Fri Jan 4 13:01:28 2008 From: asari.takashi @ gmail.com (Takashi ASARI) Date: Fri, 4 Jan 2008 13:01:28 +0900 Subject: [Senna-dev 746] Re: =?iso-2022-jp?b?THVkaWEgLyBTZW5uYSAbJEIkThsoQiBtZWNhYiA=?= =?iso-2022-jp?b?GyRCJE4laiVzJS8kSyREJCQkRhsoQg==?= In-Reply-To: <5d04aefa0801031506t327fc36ga7ee8b55c0c76806@mail.gmail.com> References: <5d04aefa0801031506t327fc36ga7ee8b55c0c76806@mail.gmail.com> Message-ID: <5d04aefa0801032001m7f6ef8e2xb9b098006343afa1@mail.gmail.com> 自己レスです。 新年早々申し訳ありません。先ほどのメールの内容は、 なんと太古の senna-1.0.4 時点での情報でした。 senna-1.0.9 + ludia-1.4.0 で改めて試してみたところ、 まったく正しくリンクされていました。お騒がせしました…。 こんな私ですが、これからもよろしくお願いします。 # senna-cfg --version してみてかなり焦った 08/01/04 に Takashi ASARI さんは書きました: > こんにちは。浅利といいます。初めての投稿となります。よろしくお願いいたします。 > > Ludia と Senna とで、 MeCab のリンク先が異なる状態に > なっていることに気づいたので、ご報告しておきます。 > > : > -- ASARI Takashi @ Todai Fink Team http://fink.sodan.ecc.u-tokyo.ac.jp/ From negishi @ cookpad.com Mon Jan 7 10:10:04 2008 From: negishi @ cookpad.com (Yoshiteru Negishi) Date: Mon, 7 Jan 2008 10:10:04 +0900 Subject: [Senna-dev 747] Re: =?iso-2022-jp?b?GyRCRjE1QThsJHI0XiRgOCE6dyRLJEQkJCRGGyhC?= In-Reply-To: <20071227051726.GA16232@epepe.com> References: <20071226074357.GA11340@epepe.com> <20071227051726.GA16232@epepe.com> Message-ID: 根岸です 森田様、 あけましておめでとうございます。 御回答へのお礼が遅れまして誠に申し訳ありませんでした。 ご指示通りに実行してみます。ありがとうございました。 07/12/27 に morita @ razil.jp さんは書きました: > こんにちは。 > > はい。おっしゃるような処理の流れで良いと思います。 > > http://lists.sourceforge.jp/mailman/archives/ludia-users/2007-December/000160.html > > ここで具体的な方法が紹介されていますね。 > この例では全てのカタカナをひらがなに変換していますが、 > 同義語の場合も同じような考え方で良いと思います。 > 同義語の表記を正規化する関数を用意していおいて、 > インデックス作成時と検索時に同じ関数を適用すれば良いと思います。 > > 検索時に同義語をor条件で付加する方法とくらべてオーバーヘッドが小さいですが、 > 同義語とみなす条件を検索時に調節できないのが欠点だと思います。 > > >>> Yoshiteru Negishi さんは書きました: > > 根岸です > > > > 森様、 > > 早々のご回答ありがとうございました。 > > 機能追加を検討して頂けるとのこと、大変ありがたく思います。実装の暁には、是非利用させてください。 > > > > ところで > > >- インデックス作成時にヒットさせたい文字列を正規化しておく > > の手法に関しても少しご教示下さい。 > > 僕が把握している範囲の技術ですと > > 1) レコードを形態素解析する > > 2) 出力を解析して同義語を付加する > > 3) 空白区切りにして新たに別テーブルにてレコードを生成する > > 4) DELIMITEDでindexを付加する > > という流れになりそうですが、これは手法的に正しいでしょうか。 > > > > ご返信いただければ幸いです。 > > よろしくお願いいたします。 > > > > 07/12/26 に morita @ razil.jp さんは書きました: > > > > > > 根岸さん。こんにちは。 > > > > > > 森と申します。 > > > > > > いまのところ、Senna自身では同義語検索機能を提供していません。 > > > > > > 同様の機能を実現するためには、 > > > > > > - インデックス作成時にヒットさせたい文字列を正規化しておく > > > > > > - 検索時に同義語をor条件に展開する > > > > > > ぐらいの手段があると思いますが、 > > > いずれもエンジンの外部で実装可能だと考え、開発を後回しにしていました。 > > > > > > しかし、根岸さんのおっしゃるように、全ての同義語を単純にor条件で結合して > > > 実行するとオーバーヘッドが大き過ぎる場合があるかもしれません。 > > > > > > SennaのAPIをいろいろ組み合わせて実行すれば > > > ある程度オーバーヘッドを緩和できると思いますが、 > > > SQL越しにそれを制御するのは難しそうです。 > > > > > > というわけで、Senna自身での同義語検索機能もそろそろ検討したいと思います。 > > > SQLからはSenna queryのプラグマを使って、Tritonn, Ludiaのどちらからでも > > > 同じ書式で使えるようなものにしたいと思います。 > > > > > > すぐには出来ないと思いますが‥。 > > > > > > 今後ともよろしくお願いします。 > > > > > > >>> Yoshiteru Negishi さんは書きました: > > > > 根岸と申します。 > > > > このMLへの投稿は初めてになります。 > > > > 先日より業務でSenna(Tritonn 1.0.8)を使っておりますが、一点どのように実行すればよいのか分からないものがありましたので、質問させてください。 > > > > > > > > 実行したい内容は、例えば > > > > "リンゴ" > > > > で検索したときに、"リンゴ"以外にも > > > > "apple"、"林檎"、"りんご" > > > > などの単語が書かれたレコードもヒットさせたいと言うものです。 > > > > > > > > すぐに思いつく方法としては、検索クエリ発生時に同義語を取得して、or検索を行う方法がありますが、そのような手法ではオーバーヘッドが大きいように感じられます。 > > > > インデックス作成時にこのような同義語を含むレコードの検索を可能とするような、何かしらの機能は組み込まれているのでしょうか。 > > > > > > > > もしよろしければご教示の程、宜しくお願いいたします。 > > > > > > > > -- > > > > 根岸義輝 > > > > > > > > _______________________________________________ > > > > Senna-dev mailing list > > > > Senna-dev @ lists.sourceforge.jp > > > > http://lists.sourceforge.jp/mailman/listinfo/senna-dev > > > > バグ報告方法:http://qwik.jp/senna/bug_report.html > > > > > > > -- > > > morita > > > > > > _______________________________________________ > > > Senna-dev mailing list > > > Senna-dev @ lists.sourceforge.jp > > > http://lists.sourceforge.jp/mailman/listinfo/senna-dev > > > バグ報告方法:http://qwik.jp/senna/bug_report.html > > > > > > > > > -- > > 根岸義輝 > > > > _______________________________________________ > > Senna-dev mailing list > > Senna-dev @ lists.sourceforge.jp > > http://lists.sourceforge.jp/mailman/listinfo/senna-dev > > バグ報告方法:http://qwik.jp/senna/bug_report.html > > > -- > morita > > _______________________________________________ > Senna-dev mailing list > Senna-dev @ lists.sourceforge.jp > http://lists.sourceforge.jp/mailman/listinfo/senna-dev > バグ報告方法:http://qwik.jp/senna/bug_report.html > -- 根岸義輝 From f-shin @ milkstand.net Mon Jan 7 16:31:23 2008 From: f-shin @ milkstand.net (Shinichi Fujikawa) Date: Mon, 07 Jan 2008 16:31:23 +0900 Subject: [Senna-dev 748] Re: =?iso-2022-jp?b?VHJpdG9ubiAxLjAuNxskQiRHJUYhPCVWJWslJCVzGyhC?= =?iso-2022-jp?b?GyRCJUclQyUvJTkkLDJ1JGwkRiQ3JF4kJkxkQmobKEI=?= In-Reply-To: References: <4319463c0712290416i3a16010axb0d261da43f8e95c@mail.gmail.com> Message-ID: <20080107161521.3FD1.F-SHIN@milkstand.net> えふしんです。 お世話になります。 レスありがとうございます。 遅くなって申し訳ございません。 > またCREATE/ALTERなどの操作の後に > #sql_****_*.MYDなどのファイルが残っている場合、Sennaの > インデックスから指定したフラグ(ngram、split_alpha等)が > 落ちている可能性があります。この場合は、 > show senna statusでフラグ落ちが出ていないか確認して下さい。 あまり理屈がわかってないのですが、頑張ってみます。 Tritonn 1.0.8に入れ替えてからは、一度だけ一時ファイルが残っていました。 1.0.7の頃は毎日ファイルが残っていましたが、この正月を挟んでは 一度きりです。 -rw-rw---- 1 mysql mysql 3470052 12月 29 12:03 #sql_61ad_0.MYD -rw-rw---- 1 mysql mysql 1024 12月 29 12:03 #sql_61ad_0.MYI -rw-rw---- 1 mysql mysql 2509432 12月 29 12:03 #sql_61ad_1.MYD -rw-rw---- 1 mysql mysql 1024 12月 29 12:03 #sql_61ad_1.MYI ただアクセス数も少なかったでしょうから、また負荷が上がった時に どうなるかを注視してみたいと思います。 > > あと、再現SQLとかもし分かれば教えていただけると助かります。 > よろしくおねがいたします。 上記ですが、このSQLで死んだ!という明確な自信がないのですが、 上記一時ファイルの中身であろう内容で、かつ、インデックスが壊れると、 このselectが失敗するというものでよろしいでしょうか? PHPのソースから拾ってきたものなので、値がプレースフォルダには なっているのですが、付け足し付け足しでなってしまった、 お恥ずかしいSQLではありますが、 ------------------------------------ ( select SQL_CALC_FOUND_ROWS id,author_id , item ,write_date ,protected ,atuser,created_on from view_log as log inner join friend_bind as fb on log.author_id = fb.fid where log.created_on >= ? and (fb.uid = ? and ((fb.type in (0,1) and log.protected = 0) or (log.protected = 1 and fb.type = 1))) ) UNION ( select log2.id ,author_id , item ,write_date ,protected , atuser,created_on from view_log as log2 inner join log_bind on log2.id = log_bind.log_id where log2.created_on >= ? and log_bind.owner_id = ? ) order by write_date desc limit 10 ; ------------------------------------ 見てわかるとおり、この部分でsennaのインデックスは利用していません。 > Tritonn 1.0.8でも1つそれ系のバグを修正しています。 > これは重たいSELECTを実行する際、高負荷の環境下だと > 一時ファイルが残り、かつmysqldがその後落ちる不具合 > (いわゆるマルチスレッドバグ)があり、それを直しました。 なお別の環境での話なのですが、本不具合は、Senna1.0.x系では 起きない問題でしょうか? よろしくお願いいたします。 -- えふしん (Shinichi Fujikawa) F's Garage http://www.milkstand.net/fsgarage Movatwitter http://movatwitter.jp From a @ razil.jp Mon Jan 7 18:37:17 2008 From: a @ razil.jp (Tasuku SUENAGA) Date: Mon, 07 Jan 2008 18:37:17 +0900 Subject: [Senna-dev 749] Re: =?iso-2022-jp?b?VHJpdG9ubiAxLjAuNxskQiRHJUYhPCVWJWslJCVzGyhC?= =?iso-2022-jp?b?GyRCJUclQyUvJTkkLDJ1JGwkRiQ3JF4kJkxkQmobKEI=?= In-Reply-To: <20080107161521.3FD1.F-SHIN@milkstand.net> References: <4319463c0712290416i3a16010axb0d261da43f8e95c@mail.gmail.com> <20080107161521.3FD1.F-SHIN@milkstand.net> Message-ID: <4781F2CD.1020700@razil.jp> 末永です。 バグ報告嬉しいです。 バグ報告がないとバグの治しようがないので。。 > 見てわかるとおり、この部分でsennaのインデックスは利用していません。 Tritonnについては、MySQLのさまざまな部分に手を入れているために Sennaのインデックスを利用しないクエリでも 問題が発生しうる可能性があります。 >> Tritonn 1.0.8でも1つそれ系のバグを修正しています。 >> これは重たいSELECTを実行する際、高負荷の環境下だと >> 一時ファイルが残り、かつmysqldがその後落ちる不具合 >> (いわゆるマルチスレッドバグ)があり、それを直しました。 > > なお別の環境での話なのですが、本不具合は、Senna1.0.x系では > 起きない問題でしょうか? Senna 1.0系に付属していた MySQLバインディングについての話だと思うのですが、 もしかしたら起こる問題かもしれません… ちなみに、Senna 1.0.8以前のSenna本体には、 高負荷時にインデックスがロックしっぱなしになるというバグがあります。 入れ替えを予定されているのでしたら、 今月中にリリースされる予定のSenna 1.1.0とTritonn最新版との組み合わせを オススメいたします。 --- Tasuku SUENAGA From ashibuya1972 @ yahoo.co.jp Tue Jan 15 14:27:14 2008 From: ashibuya1972 @ yahoo.co.jp (ashibuya1972 @ yahoo.co.jp) Date: Tue, 15 Jan 2008 14:27:14 +0900 (JST) Subject: [Senna-dev 750] =?iso-2022-jp?b?GyRCJUchPCU/JEskaCRDJEYxUTt6QTQzUSVHITwlPyQsGyhC?= =?iso-2022-jp?b?GyRCJVIlQyVIJDckSiQkN28bKEI=?= Message-ID: <20080115052714.10038.qmail@web3409.mail.ogk.yahoo.co.jp> はじめまして。渋谷です。 表題の件について質問させてください。 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 From a @ razil.jp Wed Jan 23 01:05:02 2008 From: a @ razil.jp (Tasuku Suenaga) Date: Wed, 23 Jan 2008 01:05:02 +0900 Subject: [Senna-dev 751] =?iso-2022-jp?b?c2VubmEgMS4xLjAbJEIkciVqJWohPCU5JDckXiQ3JD8bKEI=?= =?iso-2022-jp?b?GyRCISMbKEI=?= Message-ID: <4319463c0801220805h2719eba0v67e9b3f441b0ca60@mail.gmail.com> 末永です。 Senna 1.1.0をリリースしました。 http://sourceforge.jp/projects/senna/files/ - Senna 1.0系とAPIの互換性は保たれています。 - Senna 1.0系とインデックスの互換性は保たれています。 - senna.confが廃止されました。 なお、将来的にSenna 0.8系のインデックスのサポートは終了します。 ご了承ください。 Senna 1.0系とAPIの互換性は保たれていますので、 Tritonn/Ludiaとも Sennaだけを入れ替えてバージョンアップ可能です。 Senna 1.0系とインデックスの互換性も保たれていますので、 インデックスの再作成は必要ありません。 安定性にかかわるバグが修正されているので、 入れ替えを【強く】オススメいたします。 ●変更点 * SennaQLというSchemeベースのクエリ言語をサポートしました。 - SennaQLを受け付けるサーバsennaを追加しました。 - Senna内部に簡易なデータベース構造を追加し、 SennaQLでそのデータベースにアクセスできるようになりました。 * ★安定性に関わるバグフィックスが多く含まれています。 全てのSenna 1.0系ユーザのバージョンアップをオススメします。 - インデックスがデッドロックするバグの修正 - snippet/KWICでバッファオーバーランのバグ修正 - メモリ確保に失敗したときも、 停止せずにGCを動かしてメモリの再確保を行う機能の追加 * クエリ書式にエスケープ文字「\」が追加されました。 * その他多くのバグ修正 SennaQLについては、まだ発展途上です。 バージョン1.1系ではSennaQLの完成度を上げていきます。 --- tasuku From morita @ razil.jp Thu Jan 24 17:21:06 2008 From: morita @ razil.jp (morita @ razil.jp) Date: Thu, 24 Jan 2008 17:21:06 +0900 Subject: [Senna-dev 752] Re: =?iso-2022-jp?b?c2VubmEgMS4xLjAbJEIkciVqJWohPCU5JDckXiQ3GyhC?= =?iso-2022-jp?b?GyRCJD8hIxsoQg==?= In-Reply-To: <4319463c0801220805h2719eba0v67e9b3f441b0ca60@mail.gmail.com> References: <4319463c0801220805h2719eba0v67e9b3f441b0ca60@mail.gmail.com> Message-ID: <20080124082106.GA18709@epepe.com> こんにちは!! > * クエリ書式にエスケープ文字「\」が追加されました。 この点について補足します。 Senna1.1.0では、sen_query_open() の第一引数に渡される文字列に 「\」が含まれる場合の動作が、以前のバージョンから変更されています。 1.0.9以前: クエリ文字列中の「"」で括られた範囲内に「\」が含まれている場合、 「\」は単なる文字として解釈されます。 1.1.0以降: クエリ文字列中の「"」で括られた範囲(フレーズ)内に「\」が含まれている場合、 「\」は、エスケープ文字として以下のように解釈されます。 「\"」 : 「"」文字自身を表します。(フレーズの終端とみなされない) 「\\」 : 「\」文字自身を表します。 その他の場合 : 「\」の後続の文字自身を表します。 (注意: 「\n」は改行ではなく、「n」自身を表します) 「"」を含むフレーズをクエリで表現可能になりましたが、 文字としての「\」は、エスケープが必要になっていますのでご注意ください。 (SQL経由でクエリ文字列を渡す場合には、2重にエスケープが必要かもしれません‥) -- morita From nottegra @ gmail.com Tue Jan 29 18:20:53 2008 From: nottegra @ gmail.com (Ikumi Ishikawa) Date: Tue, 29 Jan 2008 18:20:53 +0900 Subject: [Senna-dev 753] =?iso-2022-jp?b?Tk9UGyRCOCE6dyROJF8kcjlUJCYkSBsoQkFORBskQjghGyhC?= =?iso-2022-jp?b?GyRCOnckSyRKJEMkRiQ3JF4kJjdvJEskRCQkJEYbKEI=?= Message-ID: <20d51430801290120l5faf0748jb50d27f8a0ed2ea3@mail.gmail.com> はじめまして。石川と申します。 過去ログをいろいろと拝見させていただいたのですが、該当のものがなかったため、 質問させていただきます。 [環境1] MySQL-5.0.41 tritonn-1.0.3 senna-1.0.7 [環境2] MySQL-5.0.51 tritonn-1.0.8 senna-1.0.9 環境1,2ともに現象が発生します [現象] SELECT COUNT(foo) FROM bar WHERE MATCH(○○○) AGAINST('*D+ -×××' IN BOOLEAN MODE); 上記のようなNOT検索のみを指定したSQLを発行すると、「-」の演算子が無視されて、 (この場合だと「*D+」のプラグマがあるので、)AND検索になってしまいます。 また、('*D+ -××× -○○○' IN BOOLEAN MODE)という形でSQLを発行すると、 先頭の「-」演算子のみが無視されてしまい、×××の結果から○○○を除いた結果が検索されます。 MySQLのBOOLEAN MODEの仕様を調べたところ、 http://dev.mysql.com/doc/refman/5.0/en/fulltext-boolean.html (-の項のNOTE:の部分です。) なんとなく「単独で使用した場合は空の結果を返す」というようなことが書いてあるような気がします。(すいません曖昧で。。。) 現象はSennaの仕様なのでしょうか? ご教授いただけたらと思います。 よろしくお願いいたします。 From a @ razil.jp Tue Jan 29 18:36:55 2008 From: a @ razil.jp (Tasuku SUENAGA) Date: Tue, 29 Jan 2008 18:36:55 +0900 Subject: [Senna-dev 754] Re: =?iso-2022-jp?b?Tk9UGyRCOCE6dyROJF8kcjlUJCYkSBsoQkFORA==?= =?iso-2022-jp?b?GyRCOCE6dyRLJEokQyRGJDckXiQmN28kSyREJCQkRhsoQg==?= In-Reply-To: <20d51430801290120l5faf0748jb50d27f8a0ed2ea3@mail.gmail.com> References: <20d51430801290120l5faf0748jb50d27f8a0ed2ea3@mail.gmail.com> Message-ID: <479EF3B7.3090300@razil.jp> 末永です。 一番最初に指定された「-」は無視されるというのが 現在のSennaの仕様です。 MySQLオリジナルのMATCH AGAINSTの仕様とはズレているようですね。 純粋な興味なんですが、 MATCH (cols) AGAINST ('*D+ -××× -○○○' IN BOOLEAN MODE) のようなクエリを発行する用途ってどういったものなんでしょうか。 最終的にどういうクエリを発行するのかの情報があれば、 もっと突っ込んだアドバイスが出来るかもしれません。 一応、 NOT MATCH (cols) AGAINST ('*D+ ××× ○○○' IN BOOLEAN MODE) と書くことで同等の効果を得ることはできると思います。 Ikumi Ishikawa さんは書きました: > はじめまして。石川と申します。 > > 過去ログをいろいろと拝見させていただいたのですが、該当のものがなかったため、 > 質問させていただきます。 > > [環境1] > MySQL-5.0.41 > tritonn-1.0.3 > senna-1.0.7 > [環境2] > MySQL-5.0.51 > tritonn-1.0.8 > senna-1.0.9 > 環境1,2ともに現象が発生します > > [現象] > SELECT COUNT(foo) FROM bar WHERE MATCH(○○○) AGAINST('*D+ -×××' IN BOOLEAN MODE); > > 上記のようなNOT検索のみを指定したSQLを発行すると、「-」の演算子が無視されて、 > (この場合だと「*D+」のプラグマがあるので、)AND検索になってしまいます。 > > また、('*D+ -××× -○○○' IN BOOLEAN MODE)という形でSQLを発行すると、 > 先頭の「-」演算子のみが無視されてしまい、×××の結果から○○○を除いた結果が検索されます。 > > MySQLのBOOLEAN MODEの仕様を調べたところ、 > http://dev.mysql.com/doc/refman/5.0/en/fulltext-boolean.html > (-の項のNOTE:の部分です。) > なんとなく「単独で使用した場合は空の結果を返す」というようなことが書いてあるような気がします。(すいません曖昧で。。。) > > 現象はSennaの仕様なのでしょうか? > ご教授いただけたらと思います。 > > よろしくお願いいたします。 > > _______________________________________________ > Senna-dev mailing list > Senna-dev @ lists.sourceforge.jp > http://lists.sourceforge.jp/mailman/listinfo/senna-dev > バグ報告方法:http://qwik.jp/senna/bug_report.html --- Tasuku SUENAGA From nottegra @ gmail.com Tue Jan 29 19:08:01 2008 From: nottegra @ gmail.com (Ikumi Ishikawa) Date: Tue, 29 Jan 2008 19:08:01 +0900 Subject: [Senna-dev 755] Re: =?iso-2022-jp?b?Tk9UGyRCOCE6dyROJF8kcjlUJCYkSBsoQkFORA==?= =?iso-2022-jp?b?GyRCOCE6dyRLJEokQyRGJDckXiQmN28kSyREJCQkRhsoQg==?= In-Reply-To: <479EF3B7.3090300@razil.jp> References: <20d51430801290120l5faf0748jb50d27f8a0ed2ea3@mail.gmail.com> <479EF3B7.3090300@razil.jp> Message-ID: <20d51430801290208w74e39844tcb8db37455d492a1@mail.gmail.com> 石川です。 返信ありがとうございます! > 純粋な興味なんですが、 > MATCH (cols) AGAINST ('*D+ -××× -○○○' IN BOOLEAN MODE) > のようなクエリを発行する用途ってどういったものなんでしょうか。 現象として確認しているのみですので、特にシステムとして上記のようなクエリが発生する確率は低そうです。 > 一応、 > NOT MATCH (cols) AGAINST ('*D+ ××× ○○○' IN BOOLEAN MODE) > と書くことで同等の効果を得ることはできると思います。 説明が足りず、すいません。あと、ありがとうございます。 NOT検索のみ指定したばあいは、0件で帰ってきて欲しかったんです。。。 NOT検索のみですと、クエリが遅くなるとおもいますので。 今は、アプリケーションでNOT検索のみの場合は結果を強制的に0件にするように しているのですが、やっぱり気になっていましたので、質問させていただきました。 08/01/29 に Tasuku SUENAGA さんは書きました: > 末永です。 > > 一番最初に指定された「-」は無視されるというのが > 現在のSennaの仕様です。 > MySQLオリジナルのMATCH AGAINSTの仕様とはズレているようですね。 > > 純粋な興味なんですが、 > MATCH (cols) AGAINST ('*D+ -××× -○○○' IN BOOLEAN MODE) > のようなクエリを発行する用途ってどういったものなんでしょうか。 > 最終的にどういうクエリを発行するのかの情報があれば、 > もっと突っ込んだアドバイスが出来るかもしれません。 > > 一応、 > NOT MATCH (cols) AGAINST ('*D+ ××× ○○○' IN BOOLEAN MODE) > と書くことで同等の効果を得ることはできると思います。 > > Ikumi Ishikawa さんは書きました: > > はじめまして。石川と申します。 > > > > 過去ログをいろいろと拝見させていただいたのですが、該当のものがなかったため、 > > 質問させていただきます。 > > > > [環境1] > > MySQL-5.0.41 > > tritonn-1.0.3 > > senna-1.0.7 > > [環境2] > > MySQL-5.0.51 > > tritonn-1.0.8 > > senna-1.0.9 > > 環境1,2ともに現象が発生します > > > > [現象] > > SELECT COUNT(foo) FROM bar WHERE MATCH(○○○) AGAINST('*D+ -×××' IN BOOLEAN MODE); > > > > 上記のようなNOT検索のみを指定したSQLを発行すると、「-」の演算子が無視されて、 > > (この場合だと「*D+」のプラグマがあるので、)AND検索になってしまいます。 > > > > また、('*D+ -××× -○○○' IN BOOLEAN MODE)という形でSQLを発行すると、 > > 先頭の「-」演算子のみが無視されてしまい、×××の結果から○○○を除いた結果が検索されます。 > > > > MySQLのBOOLEAN MODEの仕様を調べたところ、 > > http://dev.mysql.com/doc/refman/5.0/en/fulltext-boolean.html > > (-の項のNOTE:の部分です。) > > なんとなく「単独で使用した場合は空の結果を返す」というようなことが書いてあるような気がします。(すいません曖昧で。。。) > > > > 現象はSennaの仕様なのでしょうか? > > ご教授いただけたらと思います。 > > > > よろしくお願いいたします。 > > > > _______________________________________________ > > Senna-dev mailing list > > Senna-dev @ lists.sourceforge.jp > > http://lists.sourceforge.jp/mailman/listinfo/senna-dev > > バグ報告方法:http://qwik.jp/senna/bug_report.html > --- > Tasuku SUENAGA > > _______________________________________________ > Senna-dev mailing list > Senna-dev @ lists.sourceforge.jp > http://lists.sourceforge.jp/mailman/listinfo/senna-dev > バグ報告方法:http://qwik.jp/senna/bug_report.html > From a @ razil.jp Tue Jan 29 22:23:49 2008 From: a @ razil.jp (Tasuku SUENAGA) Date: Tue, 29 Jan 2008 22:23:49 +0900 Subject: [Senna-dev 756] Re: =?iso-2022-jp?b?Tk9UGyRCOCE6dyROJF8kcjlUJCYkSBsoQkFORA==?= =?iso-2022-jp?b?GyRCOCE6dyRLJEokQyRGJDckXiQmN28kSyREJCQkRhsoQg==?= In-Reply-To: <20d51430801290208w74e39844tcb8db37455d492a1@mail.gmail.com> References: <20d51430801290120l5faf0748jb50d27f8a0ed2ea3@mail.gmail.com> <479EF3B7.3090300@razil.jp> <20d51430801290208w74e39844tcb8db37455d492a1@mail.gmail.com> Message-ID: <479F28E5.4030402@razil.jp> 末永です。 なるほど、ユーザからの入力としてクエリが発生する可能性がある、 ということですね。 0件ヒット、検討してみます。 一応補足&蛇足ですが、 > NOT MATCH (cols) AGAINST ('*D+ ××× ○○○' IN BOOLEAN MODE) > と書くことで同等の効果を得ることはできると思います。 って、 > MATCH (cols) AGAINST ('*D+ -××× -○○○' IN BOOLEAN MODE) と同等になっていないですね。 NOT MATCH (cols) AGAINST ('××× ○○○' IN BOOLEAN MODE) だと同等になりますね。 Ikumi Ishikawa さんは書きました: > 石川です。 > 返信ありがとうございます! > >> 純粋な興味なんですが、 >> MATCH (cols) AGAINST ('*D+ -××× -○○○' IN BOOLEAN MODE) >> のようなクエリを発行する用途ってどういったものなんでしょうか。 > 現象として確認しているのみですので、特にシステムとして上記のようなクエリが発生する確率は低そうです。 > >> 一応、 >> NOT MATCH (cols) AGAINST ('*D+ ××× ○○○' IN BOOLEAN MODE) >> と書くことで同等の効果を得ることはできると思います。 > 説明が足りず、すいません。あと、ありがとうございます。 > NOT検索のみ指定したばあいは、0件で帰ってきて欲しかったんです。。。 > NOT検索のみですと、クエリが遅くなるとおもいますので。 > > 今は、アプリケーションでNOT検索のみの場合は結果を強制的に0件にするように > しているのですが、やっぱり気になっていましたので、質問させていただきました。 > > > > 08/01/29 に Tasuku SUENAGA さんは書きました: >> 末永です。 >> >> 一番最初に指定された「-」は無視されるというのが >> 現在のSennaの仕様です。 >> MySQLオリジナルのMATCH AGAINSTの仕様とはズレているようですね。 >> >> 純粋な興味なんですが、 >> MATCH (cols) AGAINST ('*D+ -××× -○○○' IN BOOLEAN MODE) >> のようなクエリを発行する用途ってどういったものなんでしょうか。 >> 最終的にどういうクエリを発行するのかの情報があれば、 >> もっと突っ込んだアドバイスが出来るかもしれません。 >> >> 一応、 >> NOT MATCH (cols) AGAINST ('*D+ ××× ○○○' IN BOOLEAN MODE) >> と書くことで同等の効果を得ることはできると思います。 >> >> Ikumi Ishikawa さんは書きました: >>> はじめまして。石川と申します。 >>> >>> 過去ログをいろいろと拝見させていただいたのですが、該当のものがなかったため、 >>> 質問させていただきます。 >>> >>> [環境1] >>> MySQL-5.0.41 >>> tritonn-1.0.3 >>> senna-1.0.7 >>> [環境2] >>> MySQL-5.0.51 >>> tritonn-1.0.8 >>> senna-1.0.9 >>> 環境1,2ともに現象が発生します >>> >>> [現象] >>> SELECT COUNT(foo) FROM bar WHERE MATCH(○○○) AGAINST('*D+ -×××' IN BOOLEAN MODE); >>> >>> 上記のようなNOT検索のみを指定したSQLを発行すると、「-」の演算子が無視されて、 >>> (この場合だと「*D+」のプラグマがあるので、)AND検索になってしまいます。 >>> >>> また、('*D+ -××× -○○○' IN BOOLEAN MODE)という形でSQLを発行すると、 >>> 先頭の「-」演算子のみが無視されてしまい、×××の結果から○○○を除いた結果が検索されます。 >>> >>> MySQLのBOOLEAN MODEの仕様を調べたところ、 >>> http://dev.mysql.com/doc/refman/5.0/en/fulltext-boolean.html >>> (-の項のNOTE:の部分です。) >>> なんとなく「単独で使用した場合は空の結果を返す」というようなことが書いてあるような気がします。(すいません曖昧で。。。) >>> >>> 現象はSennaの仕様なのでしょうか? >>> ご教授いただけたらと思います。 >>> >>> よろしくお願いいたします。 >>> >>> _______________________________________________ >>> Senna-dev mailing list >>> Senna-dev @ lists.sourceforge.jp >>> http://lists.sourceforge.jp/mailman/listinfo/senna-dev >>> バグ報告方法:http://qwik.jp/senna/bug_report.html >> --- >> Tasuku SUENAGA --- Tasuku SUENAGA