…で、どうやって入れたらいいねん
誰か教えてくれ!
PerlとMySQLのバインディングもあるよ。
はてなで使ってるのはそれか、さらにカスタムしてるかも。
すごい使い勝手はよさそうなんで、PHPとPostgreSQLのバインディングもよろしく。<ブラジルの中の人
いざとなれば、他のPECLの見様見まねで自分でPHPバインディングつくるかも。
GPLのライブラリはPHPライセンスと衝突するからまずいという議論が
php-dev であったよ。それで Rast のモジュールもお蔵入りになり、
namazu も pecl から撤退した。
やっぱりGPL絡みで本家に期待するのは難しいですね。
自分でコソーリ作ってコソーリ使うか。
Namazuは将来libnmzをLGPLにするという話があるみたいだけど
分かち書きインデックスの精度に限界を感じてるので、それでPECL復帰しても使うかは微妙。
RastかSennaがいいなあ。
しかしEstraierも含め国産全文検索エンジンは何で揃いも揃ってGPLなんだろ。
コアがLGPL/BSDLで、フロントエンドの実装がGPLなら、ぐっと使いやすくなるのに。
# Namazuを引き合いに出すけど、わざわざLGPL版を書き起こさなくてもソースコードの著作権者が
# 「LGPLにライセンス変更です」って宣言すればいいだけと思う。
Estraier はコアのLGPLであるところのQDBMライブラリのGPLな全文検索
フロントエンドな訳だけどね。
モジュールが書ける腕なら同等機能を作るのは問題ないはず。ソース見てみ。
Rast も XMLRPC 経由で使えばライセンス問題は起きないから、
仕様が公開されれば php からも使えるでしょ。
あと、Estraier の次バージョンの HyperEstraier はライブラリ形式で LGPL。
著作権者って送ったパッチが取り込まれた奴全員だよ?
一人でもヤダっていったらダメな訳だし、そもそも連絡取れないとおもう。
>>8
まだ見てるかな。
Rast がライセンス変更になったよ。BSDライクな奴だってさ。
そんで、phpモジュールも公開再開だって。
個人的には、そろそろ公開されそうなHyperEstraierのノードAPIに
期待してるわけですが。 APIを見ると、文書の属性は保存できないんだね。
まぁべつのBDBなりなんなりに入れろということか。
文書管理の面からすると、RastとかHyperEstraierに比べてそのへんが面倒?
逆に文書管理に縛られずに自由にいろんなアプリに組み込めるのがいいところなのかな。
独自パッチバージョンのMeCabが必要という時点で、
お試しで軽く触ろうという意欲が無くなるな。
sennaにしか効果ないパッチじゃなく、MeCab全体に役立つパッチとして
MeCab公式に取り込んでもらいたいところだな。
>>14
MeCab0.9で取り込まれたっぽいからpatchはもういらないぽ MySQLバインディングのところ、
「skipmode-patchについてはここでは触れません。」
って書いてるけど、
どこで触れてるの?
なんでこのスレ書き込み少ないん?
普通に便利だと思うんだが…
>>22
使用する機会が少ないから。
ホームページならGoogleでいいし、blogなどの検索機能でも十分だし。
それ以外ではSQLのlike検索で十分なパフォーマンスになる程度の量しかない。 PHPでSennaを使ってHTMLを検索するときに、インデックス生成はどうやってやればいいんでしょうか?
MySQLを使用したものしか製作したことがないので…
>>22
Mysqlの全文検索がUTF8対応だからじゃないかな
N文字でも分かち書きでもいいけどとにかく適当に分割してやれば日本語でも検索できる
じゃあSennaって?ていう感じじゃないだろうか っていうか2ch絡みの企業の製品なんて使いたくもない。
>>http://pc8.2ch.net/test/read.cgi/php/1157467026/382
>382 名前:nobodyさん sage 投稿日:2006/10/05(木) 14:59:05 ID:???
>MySQLならMeCabとかで分かち書きして、UTF-8でFULLTEXTに放り込む手もある。
こんな事を書いてたら某所で取り上げられてて驚いた。(適当に要約し引用)
>MySQL&PostgreSQLの全文検索は転置インデックスだが、Sennaは完全転置インデックスを採用している。
>完全転置インデックスの採用によって、Sennaはフレーズ検索する事ができる。
>>27
フレーズ検索に対応ってのは結構大きなポイントだねぇ 1.0完成記念age!
少し前の使ってるけど
入れ直した方がいいのかな?
>>34
入れなおして、インデックスを作りなおすといいかも。
安定性が増している・・・はず・・・ phpバインディングまだぁ?
この前、ぐにゃらくんが PHP extensionの書き方勉強してるっていうんで
期待してたのだけれども。
>>37
rm -rfで書き途中のヤツを消してしまった。
今は書き直して、basic APIまでできてる。 大量のデータをDBも使わずにいじるケースが想像しにくいんだけど
PHPバインディングってどういう用途で使うの?
>>39
んだ。特に今のSennaはストレージを持っていないから、
ドキュメントの更新は古いドキュメントの内容を渡さないといけない。
となると、実用的なアプリを書くとなると、
やはりBDBとかsqliteに別途ドキュメント情報を持っておく必要があると思うんだけどなあ・・・ >>37
というわけで、作り方だけ公開してみた。
地味にAPIを増やしていく予定。 現在PHP+MySQLでシステム運用してるけど、もしも導入が超簡単なら導入したい。
例えばsennaのファイルをどっかに置いて、ちょこっと設定ファイルをいじるだけでOK、とか。
それも現在のシステム構成に影響出さずに導入できるなら・・・
それならお金出してでも導入したい。
3万までなら出す。
パッケージソフトとして3万ならそこそこ高価だろ。
別にたいした規模のソフトじゃないし。
>>42
うひひ。果報は寝て待て。
>>44
オープンソースなので、勝手にrpm作って売ってもOKですよ。 >>45
>オープンソースなので、勝手にrpm作って売ってもOK
訴えられても知らんよ・・・ 訴えられるわけないだろw
元からそういうものなんだから
>>47
じゃあ、お前が売れば?
オープンソースの定義・概念や意味を本当に理解しているのなら、ね。 >>42
MySQLのリビルドが必要だから超簡単とは言いづらい.
dump→リビルド→データ流し込むの作業が簡単かどうか.
LudiaはPostgreSQLのリビルドの必要なく組み込めるらしい.
>>49
NTTデータ社員乙 >>49
>dump→リビルド→データ流し込むの作業が簡単かどうか
どっちって言うと、超難しい&めんどくさい。
dumpと流し込みはいいとして、リビルドってのが激しくイヤだ。
絶対に何かトラブルが発生するのが目に見えている。 >>51
うん、だからもっと簡単に導入できるソリューションが出るまで我慢する! >>39
ドキュメントは MySQL にもってるけど、Senna を MySQL に組み込むのはちょっと嫌というケースかな。
PHP バインディングで MySQL 上の ID とからめてインデックスを作っておいて、検索→ドキュメントは MySQL から引っ張り直す、みたいな。
しかし、PHP の検索部分を mod_php とかで動かすと、インデックスの読み込みで httpd のプロセスが肥大化したりしないのだろうか。
あと、ロードのオーバーヘッドとかも気になる。
そういう点では、PHPバインディングに実用性あるのかは俺も聞きたい。 >>53
なるほどね…疎結合でいいならそういう用途もあるなあ。
プロセス肥大化については、
インデックスファイルはmmapで読み込まれるので
まあ大丈夫だとは思います。
ロードのオーバヘッドはある程度はあるかなあ。
mod_phpにもなんらかの形でインスタンスを保持しておく方法があると思うので、
それを利用すればイケるんじゃないかな…(適当) >>54
例えば mod_php を動かしている httpd のプロセスが複数動いているとして、インデックスをロードする領域は共有されてるって事ですか?
世界の権威であるCOMDEXが「21世紀のスタンダード」に認定したソフトウェア、
それがホームページ制作王である。ホームページ制作王に不可能はない!
標準外のイカサマ商品の売買で生計を立てるインチキ企業工作員が、
本当は血縁でもセレブでもなんでもない「叶姉妹」や、データを捏造した社員は
月曜朝に株で大儲けしている「あるある大辞典」にコロっと騙される日本人の気質を科学的に分析し、
ホームページ制作王を使ったことのない者や、使いこなせなかった者を煽動し、
彼らに八つ当たりのデタラメな風評をデッチ上げさせたために、我が国はホームページ制作王の
標準化に失敗し、21世紀も7年目に入った今、我が国のオーソリューションは世界に大きく遅れを取っている。
世界標準・ホームページ制作王の普及を妨げる、あらゆる工作活動を糾弾せねばならない。
制作王の普及によって、標準未満のオーサリングツールしか作れない連中を淘汰しなければならない。
そして、我が国は、1日も早くホームページ制作王の標準化を達成し、世界に追いつかねばならない。
世界が認めたホームページ制作王
http://pc11.2ch.net/test/read.cgi/hp/1144987720/ pearのインストールと同じくらい簡単になってくれないと、導入する気が起きない。
>>61
2GBの文書だったら、3GBくらいになると思う。経験的に… >>62
もれもOSC2007見てきたけど、なかなか良かった。
今後tritonnのドキュメントが充実していけば嬉しいな。
でも、確かにMeCabとSenna入れて、それからMySQLにパッチあてて
コンパイルしないといけないってのはメンドイな。。。。
シェルから「senna install」だけで使えるようになってくれるなら、鯖1台につき1万ずつ払う。
そのsenna コマンドはどうやってインストールするんだ。
$ sudo apt-get install senna
か
$ cd /usr/ports/database/senna && sudo make install
とかじゃだめなんか
>>68
「たとえば」の話にマジレスするなよ。
要するに簡単にインストールできないかな、ってだけだ。 >>71
7秒平均かかってたクエリーが.5秒以下になった
Webベースのアプリなんでこれで十分す
>>72
mysqlのコマンドってmsecレベルの計測出来るの? どれぐらいのデータ量で7秒が.5秒になったのか教えてくれると
俺はきっとハッピーな気分になれるんだ
like検索してたのをsennaに置き換えたらそうなるよね
10万件くらいあればlike検索で7秒くらいかかるんじゃない?
全然具体的じゃなかったですね、、
150万件でテーブル[int(10),text]サイズが1.5Gくらいです
検索は75の書いておられる通りで、
MATCH(title) AGAINST('+Sagasu -Iranai' IN BOOLEAN MODE)
みたいなのをlikeでやってました
“これで十分す”と書いておきながら構築中に気になった
(スレ違いな)質問いいでしょか?
http://qwik.jp/senna/mysql_configure.html
CPU: Intel(R) Pentium(R) D CPU 3.20GHz stepping 04
なのですが、configure時の-mtuneってどれがよかったんでしょ?
あと、MySQL+PHPではsmp対応カーネルを使わないほうがいい
とググって得た情報なのですがこれは正しいですか?
というような質問をしているものですのであまり参考にならないとは
思いますが。。 そういえば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 用じゃ儲からないだろ
>>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にスペース区切りという、
> 特定の言語に依存した全文検索機能がついている以上、
> 高度な検索エンジンではないとか言っても説得力が無い。
どこが?スコア付けもしない全文検索機能が「高度な検索エンジン」か?
ちがうだろ。
>>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に、検索クエリに指定する式の最大値を指定します。」
ってどういうこと?「検索クエリの式」は判るけど、「式の値」って何?
>>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 みたいな名前のパッケージを導入するのがいいのではないかな。 >>178
確かに妙な感じになったので
RPM版をすべてアンインストールしてtarball版を使うことにしました たしかmysql-dev相当のがなんかしらんけどインストールされなかったよね
-configもそのひとつだったとおもう
specを調整しないといけなかったような
2chのスレのdatファイルをgz圧縮して格納しているんだが、
これをSennaで検索できるようにしたい。
インデックスを作るだけなら単に解凍してインデックスすればいいから
いいけど、
問題はスニペット。
検索結果を20件ずつ分けて表示するとしても、
検索結果を表示するたびに20個のgz圧縮datを解凍して
スニペットを作るというのは解凍が無駄なような気がする。
どうしたものか・・・。
スニペットを消すというのも手と言えば手だが思考停止に他ならないような気がする。
そうすると、解凍したdatをキャッシュするとかですかね・・・。
ちなみに現在の格納数は2818個です。
この2818個が196052KB(圧縮したサイズ)、
今後70GB程度まで格納を続けるつもりです。
196052KBの70GBに占める割合は0.2%ぐらいです。
解凍したものをポスグレとかMySQLに突っ込むのはダメなの?
ポスグレの場合は、大きいレコードは勝手に圧縮されるはずだから、
容量もあまり食わないし、キャッシュとかもしてくれると思う。
MySQLもそうなんじゃない?知らないけど。
>>180
レスありがとうございます。
データベースですか・・・
一応MySQLを使っていますがまだ勉強途中で圧縮されるかどうかは知らないです。
解凍したものをキャッシュするとすればそれが最適ですかね・・・
判りました、ありがとうございました。 トリトンのipadicのdicrcで
config-charset = EUC-JP
ってなってるんですが、これ間違いですか?
トリトンに組み込んでる辞書はUTF-8にしてるはずですよね?
EUC-JPへの辞書コンバートがどうもうまくいかず
調べているうちに見つけました
これが原因なのかどうかはまだ分かりませんが
dirrcで設定したら正しくコンバートできました
コンバートしてもdirrcは書き換わらないので
そのままになってるみたいですね
>>111-112の SEN_INDEX_SPLIT_ALPHA とかを有効にしたいんだけど
ソースからいれないと駄目なのかな?
TritonnのLinux x86(non RPM packages)を使っています >>186
バイナリ配布のものでもいけるはずですよー。 http://pc11.2ch.net/test/read.cgi/php/1183501450/
から誘導されてきました。
■環境
CentOS release 5.2 (Final) + Apache/2.2.3 + PHP 5.1.6 + Mediawiki v1.13.1 + Tritonn組み込みMySQL(http://qwik.jp/tritonn/) on MW ware version 5.0.0 (メモリ256MB)
Tritonn組み込みMySQL = mecab + tritonn + senna +MySQL
■問題
Mediawikiの検索窓から、例えば検索キー「を膜上に」で検索すると、msqldが潰れます。
傾向としては、助詞を前に付けて検索を行うと、検索が終わらなくなるようです(例外はあった)。
×:「を膜上に」「と化学物質の」「と化学物質」「に毛細血管」
○:「を膜上」「膜上に」「化学物質」「化学物質の」「毛細血管」「毛細血管の」
同じようなトラブルにあった方いませんか?対応はどうしました?
■Backtrace
シェル上にはBacktraceが延々と
*** glibc detected *** /usr/sbin/mysqld: double free or corruption (out): 0x091c1018 ***
======= Backtrace: =========
/lib/libc.so.6[0x6a9b16]
/lib/libc.so.6(cfree+0x90)[0x6ad070]
/usr/lib/libsenna.so.0(sen_free+0x1d)[0x236409] 以下略
■mysqlの遺言。最後に投げたクエリー
SELECT /* Medicine */ page_id, page_namespace, page_title FROM `medntpage`,`medntsearchindex`
WHERE page_id=si_page AND MATCH(si_title) AGAINST('+ U8e381ab U8e6af9bU8e7b4b0U8e8a180U8e7aea1 ' IN BOOLEAN MODE) AND page_is_redirect=0 AND page_namespace IN (0) LIMIT 20
↑あわわ「medntsearchindex」か 誤:MW ware
↓
正:VMware workstation version 5.0.0
潰れるってナニ?
コア吐いてプロセスが死んじゃうの?
ps -eFしてみると/usr/sbin/mysqld は残っているんだけど、サーバ越しには反応しない。
/sbin/service mysql restart とか打つと、延々反応無し。 kill -9 して再起動させないと駄目。
止まっちゃうような検索キー「と化学物質」を投げた直後にシェルには、これコアダンプって言うんでしょうか?
メモリダンプしてるから多分そうなんでしょうね。
他の環境で再現されなければ、インストール方法とか環境の問題で片付けるしかなさそう。
ちなみにMediawikiにぶち込んだデータは3万件です。
どなたか、ヒントを頂ければ幸いです。とりあえず、環境を変えて再現性を取る予定。
*** glibc detected *** /usr/sbin/mysqld: double free or corruption (out): 0x091c1018 ***
======= Backtrace: =========
/lib/libc.so.6[0x6a9b16]
/lib/libc.so.6(cfree+0x90)[0x6ad070]
/usr/lib/libsenna.so.0(sen_free+0x1d)[0x236409] ・・・略
======= Memory map: ========
00110000-00263000 r-xp 00000000 fd:00 565891 /usr/lib/libsenna.so.0.0.0
00263000-00264000 rwxp 00153000 fd:00 565891 /usr/lib/libsenna.so.0.0.0
0037d000-00388000 r-xp 00000000 fd:00 720898 /lib/libgcc_s-4.1.2-20080102.so.1
・・・略・・・
b7569000-b756a000 ---p b7569000 00:00 0
b756a000-b7f6e000 rw-p b756a000 00:00 0
bfe4b000-bfe61000 rw-p bfe4b000 00:00 0 [stack]
っっっっ
>>193
インデックスのロックかかってるみたいね。
mysqldを落としてmyisamchk -rをすれば直るはず。
稼動中のデッドロックの問題は反映されてるけど、
途中でお亡くなりになった場合にはロックがかかりっぱになることがある。
FULLTEXTで使われる、()"' 等を含んだ語や、頭に+-~のついた語を検索したい場合
どのようにエスケープするべきでしょうか?
検索は下記のように行っています。
〜WHERE match (myText) AGAINST("*E-4D+ ABC" IN BOOLEAN MODE)
>>195
\(とか\)とか\"とか\'とか、
"+test"とか"-word"とか、
できた記憶が。 >>196
早速有難う御座います。
この方法で試してみたいと思います。 明けましておめでとうございます
今年もよろしくです>Senna&Tritonn
あめおめ書きこみキタコレ
今年はSennaの次期バージョンが出ますよー。名前も変わるお
今日FreeBSDのportsにtoriton当てようとして失敗した私が通りますよっと
バージョンアップ早すぎだって
グルーンガってamazonのsimpleDBとかっぽい感じかなー
>>201
MonetDB的な感じでー。いちおうデータ保存についてはブログ書いてみた。 find.2ch.netみたいに2chのログを検索出来るようにするには、どうすればいいのだろうか
〜WHERE match(myText) AGAINST("+あああ -いいい" IN BOOLEAN MODE)
いける
〜WHERE match(myText) AGAINST("-いいい" IN BOOLEAN MODE)
駄目・・・
NOTのみの検索ってどうしたらいいんでしょか?
>>206
ありがとうございます 出来ました!
MLで
>クエリを発行する用途
について書かれていたのですが、
私の場合(Senna導入以前からの実装を引きずってますが)一旦
大分類・小分類・期日指定 で全文検索を用いずにある程度データを絞ります
抽出されたデータのうち95%程度が条件Aに起因するものとして、残り5%の
レアケースを調べたい場合に
-条件A
とやりたかったのです amazon EC2上の Ubuntu8.04 にtritonnをインストールしようとしているのだが、
ソースをmake install した後、mysql_install_dbをするといつまでたっても終わらん。
普通このコマンドってどれくらいの時間で終わるんだ?
mysql自体ソースから入れたことないからわからんのだ・・
ちなみに以下の手順でやった
*mecabをインストール
#apt-get install mecab
#apt-get install mecab-ipadic
#apt-get install libmecab-dev
+IPA辞書をUTF-8に変換
# /usr/lib/mecab/mecab-dict-index -d /usr/share/mecab/dic/ipadic -o /var/lib/mecab/dic/ipadic -f euc-jp -t utf-8 -p
#/usr/lib/mecab/mecab-dict-index -d /usr/share/mecab/dic/juman -o /var/lib/mecab/dic/juman -f euc-jp -t utf-8
Mecabで利用する辞書の切り替え
# update-alternatives --config mecab-dictionary
(続く)
$ time mysql_insert_db
read 0m0.594s
user 0m0.180s
sys 0m0.260s
ローカルでやってみたよ
人柱乙m9(^Д^)
>>210
orz...
6時間待っても終わらなかった・・・ むー、Amazon EC2ためしにやってみようかしら。
今度はamazon公式イメージのfedora8でやって、rpmで入れたらすんなりはいった。
よくわからないubuntuイメージを使ったのがいけなかったのか?
sanna+mecab+mysqlでためしてますが、検索結果がおかしい…
windowsだと200件ヒットするのにwinだと10件しかヒットしないんですけど何が原因ですか?
"win" in boolean mode
や
ft_min_word_len=1
など設定して再ビルドしましたがうまくいきません。
グニャラくんのブログをしっかり読めばわかる
要するに検索漏れ
>>214-215
漏れじゃないお!
SPLIT_ALPHA的なフラグを指定するといいです。
winのようなprefixだったら、
"*E-7 win"とかでもひっかかるかな。
ft_min_word_lenとかはSennaには全く影響がないので注意。 お礼遅れて申し訳ないです。
*E−7で解決できました。
多くの回答いただき感謝します。
ps
wikipediaデータで実験してますが流石に全文検索は5分くらいかかりますねorz..
>>218
5分って遅すぎ!
メモリか論理空間足りなくてスラッシングが起こってるんじゃね? 遅いですか?(ということはもっと早くなる!?)
メモリは2GでWikipediaデータは5Gぐらいです
まだチューニングをあまりしていないのでちょっといじって見ます
>>220
0.何秒で検索できるはず。
Wikipediaデータが5Gくらいあるなら、メモリも5Gくらいないと厳しいよー。
んで、メモリ5G積むためには、OSも64bit化しないと。 >>221
ありがとうございます。
遅いのはやはりサーバスペックの問題ですね…発注してきます
度々で申し訳ないのですが、全文検索で「完全一致→非わかち書き→部分一致」の順で取り出したいのですがうまくいきません。
select title from searchindex where match(title) against('*E1,5 Google' in boolean mode) limit 10\G
*E1,5*D+などのプラグマもためしてみましたがだめでした。
show senna statusは以下のような感じです。
Table: searchindex
Key_name: si_title
Column_name: si_title
Encoding: utf8
Index_type: NGRAM
Sectionalize: OFF
Normalize: ON
Split_alpha: OFF
Split_digit: OFF
Split_symbol: OFF
Initial_n_segments: 512
Senna_keys_size: 1146887
Senna_keys_file_size: 33628160
Senna_lexicon_size: 430378
Senna_lexicon_file_size: 12656640
Senna_inv_seg_size: 136482816
Senna_inv_chunk_size: 18223104
おもに参考にしたのは以下です。
http://lucene.jugem.jp/?eid=158
http://qwik.jp/senna/query.html どううまくいかないのかを書き忘れましたorz…
完全一致が1番目にこないです。
---------------------
Top_10_Google_hits
Google_マップ
Google_Earth
Google←これが1番にきてほしい
…
--------------------
>>223
それは検索スコアの問題だから難しいす。
僕が作っている実システムでは、
・タイトル完全一致のみで検索(Sennaのインデックスを使わずに、MySQLのB-Treeインデックスを作る)
・全文検索
を分けて2回クエリ投げています。 >>221
>Wikipediaデータが5Gくらいあるなら、メモリも5Gくらいないと厳しいよー。
DBを基礎から勉強し直せ デフォルトではスコア順にソートされないです。こんな風に書くとどうですかねぇ。。
select title, match(title) against('*E1,5 Google' in boolean mode) as score
from searchindex where match(title) against('*E1,5 Google' in boolean mode)
order by score desc limit 10\G
みなさまありがとうございます。
>>224さん
いろいろ調べてみましたがそのやり方しかないのかもしれません…
公式ではEプラグマで実現できそうなのですが…
>>226さん
*E数値1[,数値2]プラグマもためしたのですが公式に記載されている挙動をしていないようです。
公式の説明ではE1,5で全文一致が1つ以下なら5つスコアを下げて部分一致をとる挙動になると思うのですが完全一致も部分一致も同じスコア値になっています。
+--------------------+-------+
| page_title | score |
+--------------------+-------+
| Top_10_Google_hits | 5 |
| Google_Earth | 5 |
…
| Google | 5 |
+--------------------+-------+
また"Google"で完全一致がとれません。"Google*"でも前方一致以外がとれたり(Top_10_Google_hitsもとれる)します。
>>225
全部キャッシュに載ってないと厳しいよ。
SSDならなんとかなるかもしれないけど。 >>227
Top_10_Google_hitsは前方一致でひっかかってるよ。
_は記号扱いなので、
Top 10 Google hitsと同じような感じでひっかかります。 >>228
これって全部キャッシュにのってないと
0.何秒が5分になるような検索エンジンなのかよw
少なくともインデックスがオンメモリであれば十分速度は出るんじゃないのか? >>228
お前がDB利用経験ないのはよくわかったからまず基礎を学んでから来い、な? >>230
5Gのコンテンツだと、経験上インデックスサイズがだいたい5Gになるんすよ。
というわけで、いつも目安としてコンテンツサイズ分はメモリとって、と言っています。
コンテンツがテストデータだったりして、同じ文言ばっかりだとコンテンツデータに比例してサイズ増えねっす。
インデックスを全部オンメモリに載せないと速度は出ないと思う。
インデックスファイルのうち、.lと.iはメモリに載っていてほしい。
i.cはメモリに載ってなくてOK。
スラッシング起きたら、どのエンジンでも速度でないよー。
>>231
基礎から学んでくるお!いいサイト教えて。 5G5分って16.7MBpsだぞ、シーケンシャルアクセス以下だ。インデックスが使われてない状態だろうが。
>インデックスを全部オンメモリに載せないと速度は出ないと思う。
>スラッシング起きたら、どのエンジンでも速度でないよー。
「最高のパフォーマンス」と「まともな速度」の区別もつかないDQNなのかよ
>>>231
>基礎から学んでくるお!いいサイト教えて。
つGoogle >>233
>シーケンシャルアクセス以下だ
おお、論点理解。確かにそうだねー。 >>233
インデックスは使われていると思うよ。
実際*E-7のプラグマも動いているし、Sennaまで処理が落ちているのは間違いない。
.SEN/.SEN.lは激しくランダムアクセスが走るので、
こいつらがオンメモリにないと単なるシーケンシャルスキャンより遅くなってもおかしくないな。
というわけで、>>214はMySQLのデータディレクトリにある.SEN、.SEN.lファイルの容量を計算する。
あと、http://dsas.blog.klab.org/archives/50860867.html にあるmymemcheckで、min_memory_neededを計算する。
(.SENの総容量 + .SEN.lの総容量 + mymemcheckのmin_memory_needed)が
実メモリサイズを超えていたら危険な香り。 >.SEN/.SEN.lは激しくランダムアクセスが走るので、
>こいつらがオンメモリにないと単なるシーケンシャルスキャンより遅くなってもおかしくないな。
オンメモリでないとシーケンシャルより遅くなるって、そんなのインデックスとは呼べないだろ
インデックスをメモリに載るようにするのってDBの常識じゃないの?
最高のパフォーマンスとまともなパフォーマンスの区別もつかない奴が常識を語る時代なのか…
>>238
最高のパフォーマンス: インデックスも実データもメモリ上
まともなパフォーマンス: インデックスはメモリ上、実データはメモリ外
パフォーマンスでない: インデックスがメモリ外で、スラッシング起こしている
だろ。
B-treeインデックスもmmapにしろOSのキャッシュにしろ実メモリ上にないと遅いと思うぞ。
>>238はDBに大変詳しいようだから、>>214に何かアドバイスするといいのでは? パフォーマンスでない場合って検索に5分かかって当然なの?
仮にインデックスがメモリに乗らなかったとして、それで5分はないだろ。何か間違ってるとしか。
もしスラッシングが起きてるならメモリの割り当て量間違ってるってことだし。
とりあえず Wikipedia のデータ全文投入してインデックス作ってみたよ。
■データサイズ
37822464 2009-06-19 01:03 wiki.001.SEN
387616768 2009-06-19 01:03 wiki.001.SEN.i
1073614848 2009-06-19 01:03 wiki.001.SEN.i.c
1073741824 2009-06-19 01:03 wiki.001.SEN.i.c.001
247463936 2009-06-19 01:02 wiki.001.SEN.i.c.002
801185792 2009-06-19 01:03 wiki.001.SEN.l
4686036956 2009-06-19 01:03 wiki.MYD
15630336 2009-06-19 01:03 wiki.MYI
MYD と MYI の合計が 5G 弱、
SEN と SEN.i と SEN.l の合計が 1.2G 強。
■mysqld メモリ使用量
インデックス作成時 → 1.3GB
検索時 → 60MB
■検索にかかる時間
SELECT * FROM wiki WHERE MATCH(text) AGAINST(?) LIMIT 10
で0.5秒くらい
■環境
D945GCLF (ATOM 230)
メモリ: 2GB
OS: Debian 5.0.1
おっと書きかけで送信してしまった
■検索にかかる時間 … 「wiki」や「space」等1万件以上ヒットする単語で検索
SELECT * FROM wiki WHERE MATCH(text) AGAINST(?) LIMIT 10
→初回0.2秒、2回目以降2ミリ秒
SELECT * FROM wiki WHERE MATCH(text) AGAINST(?) LIMIT 10000
→初回40〜60秒程度、2回目以降1.5秒程度
■環境
D945GCLF (ATOM 230)
メモリ: 2GB
HDD: 40GB の IDE
OS: Debian 5.0.1 (32bit)
…ということで、LIMIT さえ効かせれば1秒以下で検索できるよ。
オンメモリじゃないとシーケンシャルスキャンより遅くなってもおかしくないとかアホじゃね?
>>218は LIMIT 句付けてないんちゃう?
それかクエリ間違っててインデックス使われてないとか >>242-243
それか!全件結果を返すのはそりゃ重い。
.SENと.SEN.lがオンメモリなら十分速度出ると思うよー!
この2つの一部がページアウトしてるとマジキツいっす。
2回目以降異常に早いのはクエリキャッシュが効いてそう。
/* SQL_NO_CACHE */を入れてみると本来の2回目以降の速度が計れるんじゃないかな。 測定基準整理して計り直してみた。
OS 起動直後、インデックスがキャッシュに一切載っていない状態で
「wiki」で検索 (1万件以上ヒットする) し、応答時間を測定。
1回目
LIMIT 10: 0.643秒
LIMIT 100: 1.129秒
LIMIT 1000: 5.787秒
LIMIT 10000: 49.523秒
2回目以降 (SQL_NO_CACHE 無しの場合)
LIMIT 10: 0.007秒
LIMIT 100: 0.029秒
LIMIT 1000: 0.203秒
LIMIT 10000: 1.467秒
2回目以降 (SQL_NO_CACHE 指定の場合)
LIMIT 10: 0.007秒
LIMIT 100: 0.029秒
LIMIT 1000: 0.202秒
LIMIT 10000: 1.462秒
SQL_NO_CACHE 指定の有無は優位な差を生まなかった。
搭載メモリ 2GB だったのを 512MB に減らした状態でも測定してみた。
SEN と SEN.l の合計が 800MB 強なので、明らかに物理メモリよりインデックスの方が大きい状態。
1回目
LIMIT 10: 0.634秒
LIMIT 100: 1.104秒
LIMIT 1000: 5.787秒
LIMIT 10000: 50.292秒
2回目以降 (SQL_NO_CACHE 無しの場合)
LIMIT 10: 0.007秒
LIMIT 100: 0.030秒
LIMIT 1000: 0.207秒
LIMIT 10000: 42.752秒
2回目以降 (SQL_NO_CACHE 指定の場合)
LIMIT 10: 0.007秒
LIMIT 100: 0.030秒
LIMIT 1000: 0.208秒
LIMIT 10000: 42.771秒
LIMIT 1000 まではメモリ 2GB の時と同じ状態。
今回も SQL_NO_CACHE 指定の有無は優位な差を生まなかった。
メモリ 512MB 環境下で LIMIT 10000 の時のみ
2回目の数値が極端に悪くなって1回目と大差なくなっているのは、
1回目検索時に読み込まれたデータが多すぎてキャッシュから溢れたためだろう。
実運用では同じ検索語が連続してくることなど希だから
このキャッシュミス状態はかなり起きやすくなるはず。
なのでインデックスは全部オンメモリであることが強く望ましいのは間違いない。
が、だからといって
>>235
> こいつらがオンメモリにないと単なるシーケンシャルスキャンより遅くなってもおかしくない
などというアホなこともない。
きちんと LIMIT 切ってやればメモリに全く載って無い状態ですら1秒で帰ってくる。
(ORDER BY とかつけてると LIMIT 付けててもダメな予感がするがまだ試してない)
また、
>>230
> 5Gのコンテンツだと、経験上インデックスサイズがだいたい5Gになるんすよ。
そういうケースもあるのかもしれんが、少なくとも今回試した Wikipeida 全文では
コンテンツ 5GB 弱に対してインデックス 1GB 弱になった。
よって 2GB で十分オンメモリになる。
それにしても、今回テストした ATOM で IDE 40GB の HDD で OS 起動直後で
1万件ヒットする単語でも1分越えしなかったわけだが、
>>214はいったいどういう環境とクエリで検索したんだ? 64ビットOSにしてメモリ5Gは積まないととか言ってた奴はどこ行ったの?
通常のMysqlで動作が遅かったため
tritonn-1.0.12-mysql-5.0.67-win32.zip
をインストールしてみたのですが、
何分かInsert Selectを連続して行っているとDBが落ちてしまい
MySQLAdministratorから「Can't crete a new thread errno12」とでて
ログインできなくなったり、
できてもスキーマやテーブル一覧が取得できなくなります。
この状態で.NETからSelectなどの処理を行うと
「Got error 12 from storage engine」
とでて処理できません。
Mysql6では同様の動作が問題なく継続できていました。
サービスを再起動すると復活するのですが、
同じように何分か処理を走らすと同様の状態になります。
メモリなどハードウェアはまだ余裕の状態です。
何が原因でどうしたらいいかなど八方塞になってしまいました。
どなたかアドバイスいただけませんでしょうか。
人いない
sennachkドキュメントないんだけどこれ使えるの?
>>250
まあ今時こんな性能が悪いものは、みんあ使わんってことだ mecabの辞書がUTF-8になってるから、
sjisのdbでは使えないと思ってたんだけど
やってみたら使えてるみたい。
ngramインデックスの場合、mecabの辞書に気を遣う必要ないという認識でOKですか?
そりゃngramインデックスならmecab関係ないだろ。
mecabなしでも使えるわけだし。
あれ、半年もレスなかったのか・・・
なにか他にいいのが出てるの?
アゲてみる、ごめん
tritonn使ってみようかと思ってるんですが、
将来的にDBをマシン間で引越しするとき、MyISAMは単純にファイルコピーだけ、
ダンプ→インポートしなくても引越しできるようですが、付加されたsenna関連である
sen.*についても単純にファイルコピーだけでOKなんでしょうか。
どんな挙動するのかは知らないけど
センファイルは殲滅しておk
やたらでかいし、バックアップ対象からも外してるよ
インデックス張り直せば勝手に作るし
トリトン使ってるけど
時間によって検索結果に出たり出なかったりする時があるみたい
インデックスへの反映具合を確認する方法があればいいんだけど
Senna、Lucene、Solrなど
オープンソース系検索エンジンの
性能比較をやってるHPありませんか?
以前見たような気がするからググれば出てくるんじゃね?
Tritonnの2ind機能を使って、
select * from table force index(counter) where match(title,body) against("*W1,2 てすと" in boolean mode) order by counter desc limit 100,100
という使い方は出来ないのでしょうか?
一応検索結果は得られるのですが、limit 0,100としたのと同じように、必ず先頭からの結果になってしまいます。
force index(counter)を消せば求めている結果になります。
環境はCentOSにsenna1.1.5、Tritonn1.0.12-mysql-5.0.87、
WindowsにはTritonn1.0.12-mysql-5.0.67なのですがどちらも結果は同じです。
18 :名無しさん@どっと混む:2010/01/07(木) 09:26:06 ID:5NL2jyJpO
高根はMASKRでレイプ仲間募集するのやめたんだね
mixiで募集中か
21 :名無しさん@どっと混む:2010/01/10(日) 19:36:45 ID:FdRwgXUTO
風俗店やってるってことは高根社長は暴力団と繋がってるんだね
どこの組にいくらみかじめ料払ってるんだかw
23 :名無しさん@どっと混む:2010/01/23(土) 03:43:12 ID:Pdcv8aq0O
タカネ社長未成年に酒飲ませてレイプ
24 :名無しさん@どっと混む:2010/01/29(金) 18:16:06 ID:zMwtdkIsO
高根社長のレイプ趣味は病気だから治らない
25 :名無しさん@どっと混む:2010/02/01(月) 01:39:32 ID:uaH5mo2nO
前科者
26 :名無しさん@どっと混む:2010/02/09(火) 00:52:46 ID:JwGmN2cG0
>>25
容疑はレイプ?買春?管理売春?公然猥褻?薬物?脱税?詐欺?傷害?
28 :名無しさん@どっと混む:2010/02/14(日) 22:56:30 ID:lykq8x1VO
どこかのスレで人を死に追いやったと書いてあった
33 :名無しさん@どっと混む:2010/03/04(木) 12:49:19 ID:J8YxaRGO0
金がないって脱税がばれて追徴課税でも来たか?
せっかく脱税の隠れ蓑にプレジス営業してるのに残念だったなw
38 :名無しさん@どっと混む:2010/03/12(金) 21:09:53 ID:L0W4+sivO
首吊り首絞めプレイ大好き高根英哉 53 :名無しさん@どっと混む:2010/05/17(月) 13:14:06 ID:E/7OZVtz0
>>18
高根英哉blogでレイプ仲間募集中
私とともにマスクの女どもを弄ぶ仲間を募集する
急に思いついたら連絡をして、集まれるような仲間だ
だから、複数名募集するし、いついつという日時があるわけでもない
条件は以下のとおりだ
・SMを実践している、または興味がある
・マスクを用意できる
・都内でイベント参加できる
・イベント内容およびこの仲間を通じて知りえた情報を口外しない
・成人男子である
・携帯電話および携帯メールアドレスを私に公開できる
・酒が好きである
希望者は私宛にメールを送ってほしい
全員が参加できるわけでもないので、こちらの選択に任せてもらう
なるべく想いを書いてもらうほうがわかりやすいし
経験や顔写真も歓迎。
r2007@maskr.com
maskr_2008@yahoo.co.jp
hide@comrade.co.jp >>262はtritonnの仕様っぽいですね。
これはどうしようも無いことなのかな?
てっきり出来ると思ってたからがっくし。 groonga来てるから話題減ってる気がするけど、あげ。
limit a,b 指定で b の抽出件数指定は効くんだけど、a がゼロから効かない。
100,10 や 1000, 10 と指定しても、0, 10 と同じ結果。
フルテキストインデックス再構築したけど同じ。
インストした頃はちゃんと表示されたはずなんだが…。
誰でも簡単にネットで稼げる方法など
参考までに、
⇒ 『半藤のブブイウイウレレ』 というサイトで見ることができます。
グーグル検索⇒『半藤のブブイウイウレレ』
Z25K5IFYUN
senna作ってた会社ニコニコ動画に買収されたんだっけ?
チエオクレのハゲの悲惨なツイッター
https://twitter.com/aphonedollar
↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
この自称「ハゲ」とかいうチエオクレのブログが酷すぎる
>「DesktopHE」 はWindows10に対応してないらしい
はぁ??? ★★★大嘘デタラメ★★★を垂れ流すな!!!
■「DesktopHE」 はWindows10でも、もちろん使えるわ!!!■
■「DesktopHE」 はWindows10でも、もちろん使えるわ!!!■
■「DesktopHE」 はWindows10でも、もちろん使えるわ!!!■
■「DesktopHE」 はWindows10でも、もちろん使えるわ!!!■
■「DesktopHE」 はWindows10でも、もちろん使えるわ!!!■
チエオクレのハゲが、Javaの設定を失敗してるだけじゃねえか!!!
嘘デタラメ垂れ流しやがって、このハゲがやっていることは立派な公害じゃねえか!
hatenaとかでまで、必死こいて大嘘をばらまいているんだが
https://twitter.com/5chan_nel (5ch newer account)