組み込み型全文検索エンジンSenna
そういえばsennaがINDEXはったテーブルってdrop出来ない、、 ググると結構前に「直したよ」っていうのが見つかったんだけど あ、tritonn-1.0.0.mysql-5.0.37.senna-1.0.2でインストールしました (ブラジルの中の人ってここ見てるんでしょか?) 逆に言えば、そんなにレコードが莫大でないケース(たとえば社内イントラブログとか)なら、 無理にsenna導入しなくてもLIKE検索で十分ってことだな。。。 >>67 マジ!? 作業しにいきますよ… 手で入れるけどさ。 >>68 Senna本体のインストールは難しくないんだけどね… MySQL + SennaをDebianやFreeBSDの公式パッケージにしたいです。 パッケージ化の実作業はともかく、 メンテナとしてパッケージを投稿するための How Toを勉強する時間が足りないです。 >>72 うひひ。大規模サイトだと、それ結構効いてくるんすよ、 とマジレス。 >>76 SMPじゃないほうがいいのは、 多分InnoDBのことじゃないかしら。詳しくないけど。 OpteronとかNoconaとかガンガン指定して PHPフロントのシステムを動かしているけど、問題ないよ。 >>77 直ってるとは思うけど、 MyISAMのテーブルのドロップなら、 最悪ファイルをすべてrmすればOK。 tritonn-1.0.0はdrop indexで 一時インデックスが残るバグがあるけれど、 これも一時インデックス(#で始まるファイル名を持つ) をrmすればOK。1.0.1を急いで入れる必要なし。 >>78 そのとおり。 将来的に困ったら導入を検討してくだせぇ… (媚びた目をして) >>79-80 aptで入るとうれしいですね あといろいろ教えていただいてありがとうございます 一時インデックスはちょっと気になっていました 1.0.1でてたんですね >>78 速度面以外でもFULLTEXT INDEXになってクエリーがシンプルになったり MeCABの恩恵かと思いますが、カタカナや英数記号など 半角全角・大文字小文字を意識せずに検索出来るので その辺の処理を省けたりで文書量が少ないものでも 利用方法によってはメリットがあるような気がします SennaインストールのためMySQLにパッチ当てる ↓ MySQLバージョンアップ ↓ MySQLにパッチ ↓ MySQLバージョンアップ ↓ MySQLにパッチ ↓ MySQLバージョンアップ ↓ MySQLにパッチ MATCH (title,body) でエラーしたり全レコードHITしたり >>81 あいあいー。aptで入るように頑張りたい。 正規化は自前でやっているので、MeCabなしでも恩恵を受けられます。 >>82 CentOS 4.4でx86_64でよければ作るよ! RedHat系でi386環境がなくて… >>83 マンドクセーよね。 やはり公式パッケージ化を… ちなみに、Sennaの通常のバージョンアップがあっても MySQLの再コンパイルは必要ねっす。 でも、Tritonnのバージョンアップがあったら 再コンパイルが必要っす。 MySQL 5.1以降のplugin storageでなんとかなるか、とも思ったんだけど、 やはり高速にするには本体に手を入れないといけないのでアウト。 Ludiaは本体にパッチ入れなくていいけど、 それでもPg 8.1からPg 8.2のバージョンアップで動かなくなったしなあ… ま、Pg 8.1->8.2は中身変わりすぎなんだけど。 >>84 文字コード間違えてるとそんな挙動もあるかも。 >>86 Fedora用のパッケージ作って売ったら儲かると思うよ。 RHEL 用ならともかく Fedora 用じゃ儲からないだろ Senna, Tritonn, Ludia の Portfile (MacPorts) 書いたよ。 ttp://lapangan.net/darwinports/index.php?cmd=read&page=PrivatePortfile%2FSenna MeCab のデフォルト辞書を UTF-8 で作成する代わりに lex.c に手を入れて mecab_new() の引数で UTF-8 の辞書を指定するようにしています。 >>90 GJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ!!!! なんで、Sennaって、MySQLやPostgreSQLの 全文検索機能に公式に採用されないの? 一体なにがじゃましているの? 理解できない。 なんで、一介の日本語検索エンジンがMySQLやPostgreSQLの 全文検索機能に公式に採用されると考えるのか理解できない。 必要な人が組み込めばいいだけ。 英語圏の人がMeCabとSenna入れるなんて考えられんだろ。 Sennaはちょっと前にメジャーバージョンが出たばかりだし、 APIも結構変わってて安定しているとは言いがたい。 実際使ってるが動作はそこそこ安定してるけどね。 例 phpには日本語サポートが含まれている。 今の時代に、日本語サポートが含まれるはずが無いなんて どういう頭をしているんだ? ばかじゃねーの・・・・ PHPと同じようにMySQLは日本語サポートしてるよ。 でPHPと同じようにSennaバインディングは組み込まれてないよ。 どういう頭をしているんだ? > PHPと同じようにMySQLは日本語サポートしてるよ。 そうだな。 だから、 > なんで、一介の日本語検索エンジンが とか > 英語圏の人がMeCabとSenna入れるなんて考えられんだろ。 とか、 そういう考えがおかしいと言うことだな。 同じ理屈で、phpも公式に採用しない理由は無いということだな。 まあ、全文検索という機能はデータベースの方が重要だから、 phpよりも先にMySQLやPostgreSQLに採用されるべきだな。 ふーん。 「日本語で高度な全文検索をしたい」という99%以上のユーザに関係ない機能のために 配布パッケージに日本語形態素解析エンジンや日本語の辞書や日本語の検索エンジンライブラリを 含めることなんてありえない話だと思うがな。 あっという間にパッケージの容量とコンパイル時間が5割り増しだ。 まぁ含めろとまでは言ってなくてデフォルトで --enable-senna --senna-prefix=/usr とかをサポートしろとかいう話なのかも知れんが。 もっとも各言語の検索エンジンがMySQLに実装されてどの言語でも全文検索がデフォルトで できるようになったらすごいことだと思うけど。 MySQLはストレージであって高度な検索エンジンではないのでその方向性は限りなく ありえないものだとは言っておくよ。 必要なユーザが好きな検索エンジンを勝手に組み込めばよい。 別にMeCab使わずに日本語に特化した部分を除いても Sennaは高速全文検索として利用価値が高いと思うけど。 >>98 すでにMySQLやPostgreSQLにスペース区切りという、 特定の言語に依存した全文検索機能がついている以上、 高度な検索エンジンではないとか言っても説得力が無い。 全文検索が必要かどうかの話はとっくに済んでいる。 英単語区切り以外の区切り方という、国際化対応の話なんだよ。 >>100 > すでにMySQLやPostgreSQLにスペース区切りという、 > 特定の言語に依存した全文検索機能がついている以上、 > 高度な検索エンジンではないとか言っても説得力が無い。 どこが?スコア付けもしない全文検索機能が「高度な検索エンジン」か? ちがうだろ。 くすくす・・・くすくす・・・くすくす・・・・・・・・・・・・・・・・・・・・・・・・ぶわーはhっははっは http://dev.mysql.com/doc/refman/4.1/ja/fulltext-search.html MATCH() を WHERE 節で使用すると(上の例を参照)、 返されるレコードは関連性が最も高いレコードから 低いレコードの順に自動でソートされます。 >>101 重み付けはしてるよ。使ったことないけど。まぁ調べなよ。 >>100 実用的な全文検索方法って言うのは言語ごとにちがうのであって、 日本語の場合は形態素解析を用いるのが実際便利なわけだよね。 じゃぁ日本語サポートのためだけにどこかが作った日本語形態素解析器と エンジンを組み込むか?っていうとそれは無理なんじゃない? って言うことを言いたいだけだ。 メジャーバージョンがリリースされたばかりのSennaを公式に組みこまないのは 理解できないとか飛躍しすぎだよ。 各言語対応のN-gramインデックスでの検索機能を組み込んで欲しいというのならまだわかる。 ただその場合Sennaが採用されるかというと安定度や実績の面で明らかに微妙だろ。 > じゃぁ日本語サポートのためだけにどこかが作った日本語形態素解析器と > エンジンを組み込むか?っていうとそれは無理なんじゃない? だからなんでなんだよw >>104 書いてんじゃんよ。>>98 あというならライセンスの問題だってある。MySQLには商用ライセンスがあるでしょ。 個人で作ってるソフトウェアじゃあるまいし、そんなにかんたんに取り込めるもんでもないだろうよ。 そのほかのソフトを見てみろ。 99%の人には関係ない日本語を なんらかの形でサポートしているのが多いだろ。 それなのに日本語サポートするわけが無いなんて 理解不能。 そういう暴論はもういいって。 他のソフトと同じくMySQLだって日本語はサポートしてるっていってんじゃん。 日本語形態素解析を用いた全文検索をサポートするかって話だろ。 今のところどのオープンソースのデータベースサーバもしてないよ。 もし取り込むにしたってInnoDBとかFalconとか取り込むにも実際買収したり 取り込むクォリティにするまでにかなり時間がかかってるわけ。 そのぐらい理解してくれよ。 キモヲタ同士のキモキモ議論はその辺で終わりにしろ。 そんなことよりも、俺はとにかく簡単にsennaが使えるようになればそれでいいんだ。 組み込み易くする、ドキュメントとノウハウの充実を図る、 で必要十分じゃまいか。tritonnの中の人も、たぶんそう考えている だろうし。 まわりにsennaは良いよって言ったり、応援したりするだけで、 具体的にはなんの貢献もしていないフリーライダーの漏れが 意見する筋合いじゃないか。。。 うひひ。盛り上がってる。 公式に組み込まれない理由… MySQLはGPL/商用のデュアルライセンスで、 基本的にソースコードの著作権はMySQL ABが全部持っている。 (InnoDBなど例外あり) SennaはLGPLなので取り込めない。 PgはBSDライセンスなので、これも取り込んでもらえないと思う。 とりあえず、mysql-sennaとかpostgresql-sennaみたいなパッケージが DebianやFreeBSDで簡単に入るようになれば問題ないと思ってます。 tritonn-1.0.1.mysql-5.0.37.senna-1.0.3でインストールして使っています sennaというか全文検索エンジンの質問になると思うのですが… title:NGRAM,body:MECABで主に歌手のCD発売やコンサート情報をまとめています 例えばELLEGARDENというバンドがいるのですが、 今までLIKE '%〜%'でやっていた経緯もあり、利用者は "ELLE" などで検索をかけてきます "ELLEGARDEN"だとヒットするのですが、上記のように短縮した場合は ヒットしないようなのですが対処の方法はあるでしょうか? title(NGRAM)の方だけでもなんとかなればと思っています よろしくお願いいたします >>111 手パッチでもよいのなら… tritonn中にsen_index_createという関数が3つある。 この、第3引数、なんとかflagsを渡すところを、 なんとかflags | SEN_INDEX_SPLIT_ALPHA | SEN_INDEX_SPLIT_DIGIT | SEN_INDEX_SPLIT_SYMBOL にしてみ。 すでにパッチを当てたMySQLのソースディレクトリが残っているなら、 その中からgrepしたほうが早い。 その後make && make installして、インデックスを再作成してみて。 N-gramのtitleだけ英単語の部分一致検索が出来るようになる。 sennaで求人情報の検索サイトみたいなものを作成しようかと思っているのですが 求人の検索って基本的にチェック入れたりする方が多いですよね? そういう意味で、求人情報検索にsenna導入ってどうでしょう? >>112 うわっ、ありがとうございます! 自宅に戻りしだいやってみて結果を報告しますっ >>113 全文検索+他条件の検索だったら結構Sennaの得意なところ?だと思います。 全文検索が必要となった段階で導入してもいいと思います。 それまではlike '%xxx%'でしのぐといいと思うよ。 senna を mysql 5.0.37に組み込んでbuildしてみた。 mysqldがぜんぜん起動せず、senna patch 無しの mysqld に戻しても起動しなくなってぶち壊したかと 思ったら、libsenna.so をロードできてなかった。ldconfig したらあっさり動いた。以上今夜のチラ裏。 >>117 あるある。 /etc/ld.so.confをいじるか、 もしくはconfigure時に--prefix=/usrをつけるか。 >>112 すみません 昨日はちょっと遅くなったので今日やってみました >tritonn中にsen_index_createという関数が3つある。 3ファイル(4箇所)でよかったでしょうか SHOW SENNA STATUSで3つともONになりました (MECABの方もONになりましたがよかったのかな?) 結果は英単語の部分一致検索が出来るようになったのですが 時折クエリーに時間がかかる事が発生するようになりました 通常は0.1秒以内なんですが10秒とかかかるときが何度もあります 気になるのはインデックスファイルの更新時間なんですが データのinsert,updateでは更新されていないようです 上の問題とは関係ないかもしれませんが少し気になりました 設定などで見直す所等があったらご教示お願いします >>119 4箇所か… MeCabではそのフラグは無視されるから大丈夫。 うひ!10秒!それは実用にならないなぁ… スラッシングが発生しているかも… インデックスファイル(*.SEN*)の容量リストと メモリ容量、 テーブルスキーマと 投げているクエリを教えてもらえるともっとよく分かるかもしれません。 インデックスファイルはmmapしているので、 同期される時間はOSによると思います。 あと、kernel 2.6.18(Debianのみ)と2.6.19でmmap周りにバグがあるので、 そこらへんのカーネルを使っている人は注意が必要かも。 MySQL のレプリケーション環境での質問です。 Senna はスレーブとマスターの両方の MySQL にパッチ宛が必要ですか? 例えば検索クエリはスレーブの一つにしか投げないとき、マスターは Senna 無しでスレーブに Senna とかでもインデックスは更新されますか? >>121 大丈夫なはず。むしろ、そういう運用こそお勧めかも。 テーブルに付与されるインデックスがズレるので、 そこは気をつけないといけないかな。 あ、なんか軽く回答してもらっちゃてありがとうございます。 インデックスがずれる?てのが分かりませんでしたが、実際に環境作ってやってみます。 公式サイトでダウンロードできるmysql-5.0.24a-senna-0.8.1-win32.zipは バインディング済みってことでいいのでしょうか? >>124 バインディング済みだけど、中身かなり古いよ… Windows版ってそれなりに需要あるのかな…? ちゅっと試したい人にはありだと思うWindows版 素人考えで申し訳ないんだけど、ストレージを持たないことと、更新に古い値が必要なことって直接関係あるの? sen_index_upd()でold_valueを、sen_index_update()でold_valuesを指定せずにすむだけで使い勝手が良くなると思う。 >>128 Sennaのインデックスは転置インデックスという構造で、 単語1: 文書ID1, 文書ID2 単語2: 文書ID1, 文書ID3 という風に、単語ごとにその単語を含む文書IDのリストを持っている。 ある文書IDだけを削除する場合、 元の文書の内容がなくても、 上記のリスト中すべての単語について 指定の文書IDがあるかどうかをチェックして削除できる。 でも激遅い。実用にならない。 以下のようなリストを別途持っておけば、 削除が必要な単語についてのみ削除処理を走らせればよい。 文書ID1: 単語1, 単語2 文書ID2: 単語1 文書ID3: 単語2 このようなリストを削除時に手に入れる方法は ・上記のリストを別途インデックスとして作っておく ・元の文書を保存しておく ・元の文書を削除時に渡す(現在のSenna方式) の3つくらいある。 というわけで間接的だが結構影響あるぞ、ストレージ。 >>129 なるほど。削除を効率良く行うために元の文書が必要なんですね。 Sennaの場合は元の文書は別に保存されているはずで、重複して保存するのは ディスクの無駄であるという思想でストレージを持たない、ということで合ってます? >>130 思想としてはたぶんそうだと思います。 Sennaページの開発ロードマップによると、 http://qwik.jp/senna/Roadmap.html ストレージ機能が付いたバージョンが今月出るみたい。 たぶん、ストレージ機能が付くということは、 古い文書の内容を与えなくてもインデックスの削除や更新が できるようになるんじゃないかな。 MySQLバインディングなんかでは必要のない機能だけど、 単体で利用する場合にはかなり便利になるんじゃない? tritonn てのは mysql 本家がversion 更新したら 即更新パッチ出す。。。までは行かないの? "世界初、オープンソースの高速日本語 全文検索エンジンである「Senna」を 「MySQL Enterprise Server」に組み込んだ バイナリに対し、正式に技術サポートを提供" この「世界初」、どこにかかるのか分からん 書き方が、うざ素敵。 sennaを使っていて、 「ずっと死なないhttpdプロセス」が出来ることはありませんか? ロードアベレージが恐ろしい数になっていたので見ると、 ずっと前に生まれたhttpdプロセスがたくさん居座っていました。 apache本体を落としても、それらのプロセスは何故か生きていて、 ゾンビにはなっていません もっとも何が原因なのかは分かっていません。 普段入れていないものといえばeacceleratorとsennaくらいなので、 そのどちらかが原因じゃないか…と fulltext indexを再構築する際、 *.SEN,*.SEN.i,*.SEN.i.cファイルは 前もって削除しておいた方がいいですか? fulltext indexをdrop→create index あるいはmyisamchkでインデックスの再構築をする時に、 これらのファイルも勝手に削除や更新をやってくれるのでしょうか? dropしたらSEN系ファイルも削除されました つまらない質問してスミマセン インデックスの作成ってコストが高そうだけど SENファイル作るのほとんど一瞬ですね suge- ブラジル版のMySQLバインディングでは、 ALTER TABLE/CREATE INDEX/DROP INDEXなどを発行すると、既存のフルテキストインデックスに付与された正規化フラグやN-gramフラグが消失してしまうという問題がありました。 よって、複数のN-gramインデックスを作成する場合には、 ALTER TABLE table ADD FULLTEXT index_name_title USING NGRAM (title), ADD FULLTEXT index_name_body USING NGRAM (body); のように、1つのクエリで複数のインデックスを作成しなければなりませんでした。 ---- これって前からこんな仕様だったっけ? 全然気にせずインデックス張ってたよ・・・ >>140 GREEのパッチが入った段階でそんな仕様になった。 自分のサイトに置くつもりで、 Sennaのサイト内検索のCGIをPerlで作ってるんだが・・・ 一般公開すると仮定した場合、需要はあるだろうか? 「一般公開」っていうのは、CGIの配布のことです。 >>143 需要はあると思う。 GPL(LGPL?)で公開するのキボン(って、Mustなのかな?) >>144 一応、現在では、公開するとなればGNU GPLライセンスで公開するつもり・・・。 公開できるところまで進むかが問題だが。 現在、インデックス作成の部分は、HTMLなどなどのファイルからテキストだけを 抜く処理を書けばほぼ完成。File::Extractモジュールとか使えばいいのかな・・・? 検索処理の部分は、スキンファイルっぽい処理を書いて スニペットの処理を書けばほぼ終わり・・・。 ・・・だと思うよ。 >>146 d SennaのPerlバインディングの資料が少なくて俺涙目www Tie::Sennaなんかサンプルスクリプトすらエラーを起こす。 しょうがないのでモジュールのソースを見ながら作る。 一応・・・動くんだけど、どうして動くのか判らない、そんなものができつつあります。 >>147 > 一応・・・動くんだけど、どうして動くのか判らない、そんなものができつつあります。 そういうふうにReadmeに書いておけば、自然と情報が集まってくる希ガス 「max_exprsに、検索クエリに指定する式の最大値を指定します。」 ってどういうこと?「検索クエリの式」は判るけど、「式の値」って何? ググって出てきた http://www.koders.com/python/fid8CE7DA8C27987E7393CB41EAD4B402A2741A5C1F.aspx?s=max_exprs を見ると「検索式の最大の数」だそうだが・・・。 じゃぁ、「*D+ nana」でPerlのSenna::Index->query_execを経由してsen_query_execで検索するときに、 0だと検索に失敗し、他の数字(試した数字の例:1,2,3,10,32,50)を指定して検索すると「セグメンテーション違反です」と 怒られるのはどうして? 文字コードの問題と切り分けるべく英数字で検索しても失敗する。何故? >>149-150 の問題があるけど 大体できたから 一応アップしてみた。 人柱版ということでよろしく。動作保証ナシ。でも俺の環境では動いた。 http://takatyan.info/sss/Senna_Site_Search-0.01.zip スクリプトなどのファイルは全部UTF8でエンコードしていますから 対応エディタをお使いください・・・。 >>150 の件について、 Senna::IndexのupdateメソッドにSenna::Values型のデータを渡して インデックス作ってみたけどやっぱりダメですね・・・。 >>151 試してみた。 なんかやたらモジュール要求されるな。 Senna の他にこんだけ追加モジュール要求された。 File::Extract Class::Data::Inheritable File::MMagic::XS Spreadsheet::ParseExcel OLE::Storage_Lite MP3::Info CAM::PDF RTF::Lexer 俺の環境が Perl 5.8.0 と古いせいもあるかもしれんが… で、なんとか mksss.pl 起動までこぎつけたが 新規 1778個 更新 0個 削除 0個 と出た後 Can't call method "mime_type" on an undefined value at mksss.pl line 156. でこける… 直前の $e->extract($key); が undef を返してるようなんだが… >>153 >>151 を作ったものです。 モジュールが大量に要る件についてはすみません・・・。俺自身も大量にインスコしました・・・。 えっとですね・・・それらはほとんどFile::Extractが必要とするものです。 File::Extractは、HTMLからテキストだけを抜き出すのに使ってます。 新規1778個っていうのはファイル数ですけど、そのくらいありますか? そういえば・・・画像ファイルとかを除外する処理をしていませんね。 ですから画像ファイルをインデックスしようとして失敗しているのかも。 $e->extract($key)がundefを返したらスキップするのがいいかもしれません。 そもそもHTMLファイルだけの環境でしかテストしてませんでした・・・ $e->extract($key)がundefを返したらスキップするには、 $e->extract($key) を $e->extract($key) || return; に直すといいかもしれません。 明日にでも画像ファイルなどが混在した状況でテストしなおしてみます・・・。 >>154 ども。 検索対象にしようとしたのは某 2ch 過去ログサイトで、 新規1778個っていうのはほとんど 2ch の過去ログです。 とはいえ関係ない種類のファイルも若干混じっているので 試しに明らかに HTML しか含んでいないディレクトリ指定してやってみても 新規 67個 更新 0個 削除 0個 Can't call method "mime_type" on an undefined value at mksss.pl line 156. てな感じでした… この67個は全部 DAT2HTML で HTML 化した 2ch の過去ログです。 漏れももう少し探ってみます… >>155 mksss.plの89〜92行目ぐらいの &update($index,$constants_code{$index->encoding()},\%StorageDB,\%ModifiedDB,\%TitleDB,$_); と print "新規: $i / @{[$#new + 1]} $_ \n"; を入れ替えて実行すると、どのファイルが問題なのか判るかと思います。 >>156 thx. 試してみたけど1個目の HTML でいきなりこけてた… あーうちの環境依存の問題かな… どんな HTML 食わせても File::Extract が undef 返すっぽいわ… Perl 5.8.0 環境で動かすのは諦めておとなしく Perl 5.8.8 で動かすことにしたらすんなり先に進んだよ。 で、やたら文字化けするから変だと思ったら、 $main::IndexConvert を 1 に変えておかないとダメなのね。 それでもやっぱりスニペットが文字化けしまくるし その関係か日本語でほとんどヒットしない。 で、さらに調べたところ、 File::Extract::Result->text() は 元の HTML の文字コードにかかわらず UTF-8 バイト列を返すっぽい (たまに UTF-8 文字列を返すこともある) ので、 164行目の Encode::from_to($buf,$guess, $encoding) if($main::IndexConvert); は Encode::from_to($buf, 'utf8', $encoding) if($main::IndexConvert); にしないとダメぽ。 ほか俺が使う時にデフォルト設定から変えた部分↓ $main::Indexcode = SEN_ENC_EUCJP; (MeCab に合わせて) $main::Indexflags = SEN_INDEX_NORMALIZE; (正規化する、N-gram 使わない) @main::GuessCode = qw/cp932 euc-jp utf8 7bit-jis/; (shiftjis より cp932 の方が無難かな) $main::SkinDir = 'skinfiles/'; (パッケージ展開した直後の状態に合わせて) で、文字化け問題は大方解決したんだが、 多数ヒットするキーワードで検索すると Out of Memory というエラーメッセージが出て結果が出ないことがある。 それから Readme にも書いてあるけど TITLE とか H1, H2 とか A とかに重み付けしたスコアリングは欲しいね。 >>157-159 これはこれはありがとうございます。 File::Extractはコントラクタにオプションを渡すと文字コードの変換をやってくれるらしいので、 それに任せることにして、mksss.pl自体での本文の変換はしないことにします・・・。 重み付けをやるには、前述のSenna::Valuesクラスを使ってのインデックス化と検索ができれば Senna側としては可能です。 あとは、そのためのHTMLを解釈する部分が作れればよいのですが・・・。 File::Extractじゃ無理っぽいね。自前で書くしかないかなぁ。 >>149 遅レスだけど、max_exprsはクエリで列挙できるキーワードの数の最大値ってことだよ。例えば、 "+ああん -いやん +ばかん -うふん" だと4つのキーワードがそれぞれの演算子と共に評価されるけど、max_exprsを超える数については無視される。 Tritonnだとmax_exprs=32固定なので、一度に指定できるのは32個までという仕様になってる。 sennaのインストールや使用方法がウンコするくらい簡単になったら お金出してでも導入する。 今のように難しくて面倒くさいうちは、LIKE%%検索で乗り切る。 likeで乗り切れるくらいならsennaいらないだろう 全文検索入れるか、まったく入れないかの選択になる ってか、mysqlのバージョンが進めば、標準でマルチバイトの全文検索に対応するかな? ところで Senna っていうと MySQL で使う話ばっかり出てくる気がするんだが Ludia 使ってる香具師おらんの? トリdってRPMで入れられるんだね 大分前にソースからパッチ当てて入れた時にはかなり大変だったけど ありがたいねえdd RPMのトリトン入れました 辞書をEUC-JPとして再構成したいのですが /usr/libexec/mecab/mecab-dict-index -d /usr/lib/mecab/dic/ipadic/ -f utf-8 -o /usr/lib/mecab/dic/ipadic1/ -c euc-jp とすると /usr/lib/mecab/dic/ipadic/char.def is not found. minimum setting is used /usr/lib/mecab/dic/ipadic/unk.def is not found. minimum setting is used. /usr/lib/mecab/dic/ipadic/unk.def is not found. minimum setting is used. reading /usr/lib/mecab/dic/ipadic/unk.def ... 2 emitting double-array: 100% |###########################################| dictionary_compiler.cpp(117) [dic.size()] no dictionaries are specified と言われてしまいます。 ipadic1の中を見ると char.bin unk.dic だけしかありません。 どうすればうまく辞書の再構成ができますか? >>164 そうだよそうだよソースだよ! MySQLが標準で日本語の全文検索に対応してくれりゃいいんだよね。 どこかの会社が全文検索を初めから使えるようにしたバージョン発売しないかな。 >>168 住商情報システムが売ってるんじゃないの? >>151 をなんとかこしらえた者ですが・・・ 試行錯誤の果て、Perlバインディングによる実現は挫折しました。 結局私はMySQLバインディング Tritonnに逃げました。 というか・・・ >>151 はインデックスの更新のために文書データを丸ごとBerkeleyDBに保存しておくので 実は、MySQLなりでDB作って検索するのと本質的に変わらないということに気付きました。 そんなわけでMySQL+tritonnでやるのなら、マトモに動くのが書けそうです・・・な。 Sunに買収されたことだし、ネイティブで日本語全文検索に対応してほしいね。 もちろん無償バージョンでも。 Perlバインディングがぜんぜん動かないので 買ったはいいがPerlから乗り換える気も起きずしまいこんでいた、Rubyの入門書を 引っ張り出してきてRubyバインディングを触ってみたらこれが 簡単に動く。 あのPerlバインディングどうなってるの・・・。 tritonnにmysql_configって入ってないですか? phpでmysqliを使えるようにするために必要みたいなのですが・・・ tarボールの中に入ってたのでコピーしたらできました >>175 それはまずいんじゃ…? mysql_config って私の認識では MySQL のインストール情報を 記録しておく (いつでも表示できるような) ミニアプリなので、 手順を踏んでインストールしないと意味がないもののような気がする。 パッケージ管理システムを採用しているような Linux ディストリビューションなら、 mysql-devel とか mysql-dev みたいな名前のパッケージを導入するのがいいのではないかな。 read.cgi ver 07.5.1 2024/04/28 Walang Kapalit ★ | Donguri System Team 5ちゃんねる