組み込み型全文検索エンジンSenna

1うんこ船長2005/06/15(水) 00:14:13ID:nYzPplAZ
ないようなので立ててみました。

http://dev.razil.jp/project/senna/

2222142009/06/04(木) 13:49:53ID:???
>>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

おもに参考にしたのは以下です。
ttp://lucene.jugem.jp/?eid=158
ttp://qwik.jp/senna/query.html

2232142009/06/04(木) 14:37:07ID:???
どううまくいかないのかを書き忘れましたorz…
完全一致が1番目にこないです。
---------------------
Top_10_Google_hits
Google_マップ
Google_Earth
Google←これが1番にきてほしい

--------------------

224nobodyさん2009/06/04(木) 19:15:58ID:???
>>223
それは検索スコアの問題だから難しいす。

僕が作っている実システムでは、
・タイトル完全一致のみで検索(Sennaのインデックスを使わずに、MySQLのB-Treeインデックスを作る)
・全文検索
を分けて2回クエリ投げています。

225nobodyさん2009/06/05(金) 12:38:21ID:???
>>221
>Wikipediaデータが5Gくらいあるなら、メモリも5Gくらいないと厳しいよー。

DBを基礎から勉強し直せ

226nobodyさん2009/06/05(金) 13:37:37ID:???
デフォルトではスコア順にソートされないです。こんな風に書くとどうですかねぇ。。

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

2272142009/06/05(金) 14:23:35ID:???
みなさまありがとうございます。
>>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もとれる)します。

228nobodyさん2009/06/06(土) 00:33:01ID:???
>>225
全部キャッシュに載ってないと厳しいよ。
SSDならなんとかなるかもしれないけど。

229nobodyさん2009/06/06(土) 00:37:56ID:???
>>227
Top_10_Google_hitsは前方一致でひっかかってるよ。
_は記号扱いなので、
Top 10 Google hitsと同じような感じでひっかかります。

230nobodyさん2009/06/06(土) 11:26:37ID:???
>>228
これって全部キャッシュにのってないと
0.何秒が5分になるような検索エンジンなのかよw
少なくともインデックスがオンメモリであれば十分速度は出るんじゃないのか?

231nobodyさん2009/06/06(土) 15:53:21ID:???
>>228
お前がDB利用経験ないのはよくわかったからまず基礎を学んでから来い、な?

232nobodyさん2009/06/06(土) 18:54:01ID:???
>>230
5Gのコンテンツだと、経験上インデックスサイズがだいたい5Gになるんすよ。
というわけで、いつも目安としてコンテンツサイズ分はメモリとって、と言っています。
コンテンツがテストデータだったりして、同じ文言ばっかりだとコンテンツデータに比例してサイズ増えねっす。

インデックスを全部オンメモリに載せないと速度は出ないと思う。
インデックスファイルのうち、.lと.iはメモリに載っていてほしい。
i.cはメモリに載ってなくてOK。
スラッシング起きたら、どのエンジンでも速度でないよー。

>>231
基礎から学んでくるお!いいサイト教えて。

233nobodyさん2009/06/06(土) 21:56:23ID:???
5G5分って16.7MBpsだぞ、シーケンシャルアクセス以下だ。インデックスが使われてない状態だろうが。

>インデックスを全部オンメモリに載せないと速度は出ないと思う。
>スラッシング起きたら、どのエンジンでも速度でないよー。

「最高のパフォーマンス」と「まともな速度」の区別もつかないDQNなのかよ

>>231
>基礎から学んでくるお!いいサイト教えて。

つGoogle

234nobodyさん2009/06/07(日) 01:20:06ID:???
>>233
>シーケンシャルアクセス以下だ
おお、論点理解。確かにそうだねー。

235nobodyさん2009/06/07(日) 01:41:11ID:???
>>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)が
実メモリサイズを超えていたら危険な香り。

236nobodyさん2009/06/08(月) 05:55:39ID:???
>.SEN/.SEN.lは激しくランダムアクセスが走るので、
>こいつらがオンメモリにないと単なるシーケンシャルスキャンより遅くなってもおかしくないな。

オンメモリでないとシーケンシャルより遅くなるって、そんなのインデックスとは呼べないだろ

237nobodyさん2009/06/08(月) 19:39:07ID:???
インデックスをメモリに載るようにするのってDBの常識じゃないの?

238nobodyさん2009/06/09(火) 19:32:51ID:???
最高のパフォーマンスとまともなパフォーマンスの区別もつかない奴が常識を語る時代なのか…

239nobodyさん2009/06/10(水) 01:58:34ID:???
>>238
最高のパフォーマンス: インデックスも実データもメモリ上
まともなパフォーマンス: インデックスはメモリ上、実データはメモリ外
パフォーマンスでない: インデックスがメモリ外で、スラッシング起こしている
だろ。

B-treeインデックスもmmapにしろOSのキャッシュにしろ実メモリ上にないと遅いと思うぞ。
>>238はDBに大変詳しいようだから、>>214に何かアドバイスするといいのでは?

240nobodyさん2009/06/10(水) 09:03:42ID:???
パフォーマンスでない場合って検索に5分かかって当然なの?

241nobodyさん2009/06/13(土) 14:03:05ID:???
仮にインデックスがメモリに乗らなかったとして、それで5分はないだろ。何か間違ってるとしか。
もしスラッシングが起きてるならメモリの割り当て量間違ってるってことだし。

242nobodyさん2009/06/19(金) 08:14:11ID:???
とりあえず 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

243nobodyさん2009/06/19(金) 08:44:14ID:???
おっと書きかけで送信してしまった

■検索にかかる時間 … 「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 句付けてないんちゃう?
それかクエリ間違っててインデックス使われてないとか

244nobodyさん2009/06/19(金) 09:01:10ID:???
>>242-243
それか!全件結果を返すのはそりゃ重い。

.SENと.SEN.lがオンメモリなら十分速度出ると思うよー!
この2つの一部がページアウトしてるとマジキツいっす。

2回目以降異常に早いのはクエリキャッシュが効いてそう。
/* SQL_NO_CACHE */を入れてみると本来の2回目以降の速度が計れるんじゃないかな。

2452422009/06/20(土) 05:04:34ID:???
測定基準整理して計り直してみた。

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 指定の有無は優位な差を生まなかった。

2462422009/06/20(土) 05:06:04ID:???
搭載メモリ 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 指定の有無は優位な差を生まなかった。

2472422009/06/20(土) 05:18:28ID:???
メモリ 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はいったいどういう環境とクエリで検索したんだ?

248nobodyさん2009/06/22(月) 01:12:14ID:???
64ビットOSにしてメモリ5Gは積まないととか言ってた奴はどこ行ったの?

249nobodyさん2009/08/03(月) 13:00:48ID:???
通常の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では同様の動作が問題なく継続できていました。

サービスを再起動すると復活するのですが、
同じように何分か処理を走らすと同様の状態になります。
メモリなどハードウェアはまだ余裕の状態です。

何が原因でどうしたらいいかなど八方塞になってしまいました。
どなたかアドバイスいただけませんでしょうか。

250nobodyさん2009/08/17(月) 16:21:20ID:ha4chuFj
人いない

sennachkドキュメントないんだけどこれ使えるの?

251nobodyさん2009/08/17(月) 17:48:41ID:???
>>250
まあ今時こんな性能が悪いものは、みんあ使わんってことだ

252nobodyさん2009/08/17(月) 22:15:10ID:a7sy8cob
>>251 さんのオヌヌメ教えて!

253nobodyさん2009/09/05(土) 21:32:55ID:4Qwo+WsH
mecabの辞書がUTF-8になってるから、
sjisのdbでは使えないと思ってたんだけど
やってみたら使えてるみたい。
ngramインデックスの場合、mecabの辞書に気を遣う必要ないという認識でOKですか?

254nobodyさん2009/09/05(土) 23:48:39ID:???
そりゃngramインデックスならmecab関係ないだろ。
mecabなしでも使えるわけだし。

255nobodyさん2010/03/06(土) 02:05:32ID:???
test

256nobodyさん2010/03/25(木) 03:31:01ID:txB00Cpn
あれ、半年もレスなかったのか・・・
なにか他にいいのが出てるの?
アゲてみる、ごめん

257nobodyさん2010/04/04(日) 09:24:54ID:f5hMLlFL
tritonn使ってみようかと思ってるんですが、
将来的にDBをマシン間で引越しするとき、MyISAMは単純にファイルコピーだけ、
ダンプ→インポートしなくても引越しできるようですが、付加されたsenna関連である
sen.*についても単純にファイルコピーだけでOKなんでしょうか。

258nobodyさん2010/04/07(水) 02:19:15ID:nn78rN3+
どんな挙動するのかは知らないけど
センファイルは殲滅しておk
やたらでかいし、バックアップ対象からも外してるよ
インデックス張り直せば勝手に作るし

259nobodyさん2010/04/16(金) 10:09:21ID:dbk/orQU
トリトン使ってるけど
時間によって検索結果に出たり出なかったりする時があるみたい
インデックスへの反映具合を確認する方法があればいいんだけど

260nobodyさん2010/05/16(日) 02:14:19ID:???
Senna、Lucene、Solrなど
オープンソース系検索エンジンの
性能比較をやってるHPありませんか?

261nobodyさん2010/05/16(日) 16:24:02ID:???
以前見たような気がするからググれば出てくるんじゃね?

262nobodyさん2010/05/31(月) 10:03:05ID:ldCXIDLw
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なのですがどちらも結果は同じです。

263nobodyさん2010/06/02(水) 00:02:33ID:pNSVCSiw
1 :名無しさん@どっと混む[]:2009/12/14(月) 20:45:15 ID:unnBMLw10
高根社長のSM趣味サイトMaskRと
副業のSMクラブ銀座プレジス・動画配信専門リアルミストレスばかり語られるが
高根社長の本業コムラッドについても語ろう

銀座プレジス
http://www.prezis.jp/top.htm

MaskR
http://maskr.com/

【腹黒樹里高根】銀座プレジス3【客の情報開示】
http://set.bbspink.com/test/read.cgi/sm/1273492895/

【腹黒樹里】プレジスを語ろう2【周年イベント大失敗】
http://set.bbspink.com/test/read.cgi/sm/1262702507/

プレジスを語ろう
http://set.bbspink.com/test/read.cgi/sm/1246009466/

動画配信専門リアルミストレスってどうよ?
http://set.bbspink.com/test/read.cgi/sm/1249183350/

9 :名無しさん@どっと混む:2010/01/03(日) 18:27:00 ID:RSEbBiG0O
高値はもう大麻やめたの?

10 :名無しさん@どっと混む:2010/01/04(月) 05:15:29 ID:A3l1qdv+O
タカネ社長ってどうやってばれないように脱税してんだろ?
億単位で脱税して億ション暮らしなんて凄いよな
監査役の奥さんもグルなのか?

264nobodyさん2010/06/02(水) 00:03:25ID:pNSVCSiw
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
首吊り首絞めプレイ大好き高根英哉

265nobodyさん2010/06/02(水) 00:04:26ID:pNSVCSiw
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

2662622010/06/02(水) 08:04:37ID:kP3cOHz1
>>262はtritonnの仕様っぽいですね。
これはどうしようも無いことなのかな?
てっきり出来ると思ってたからがっくし。

267nobodyさん2011/05/22(日) 12:38:20.48ID:gdrY9aId
groonga来てるから話題減ってる気がするけど、あげ。

268nobodyさん2011/06/01(水) 17:59:58.68ID:???
limit a,b 指定で b の抽出件数指定は効くんだけど、a がゼロから効かない。
100,10 や 1000, 10 と指定しても、0, 10 と同じ結果。
フルテキストインデックス再構築したけど同じ。
インストした頃はちゃんと表示されたはずなんだが…。

>>1のリンク先が見れない

270nobodyさん2017/12/30(土) 13:38:01.64ID:YhlYw6jg
誰でも簡単にネットで稼げる方法など
参考までに、
⇒ 『半藤のブブイウイウレレ』 というサイトで見ることができます。

グーグル検索⇒『半藤のブブイウイウレレ』

Z25K5IFYUN

271nobodyさん2018/09/11(火) 09:17:33.17ID:???
もう何とかブラジルって会社もないらしいな

272nobodyさん2019/02/28(木) 10:06:09.54ID:???
senna作ってた会社ニコニコ動画に買収されたんだっけ?

新着レスの表示
レスを投稿する