【全文検索】groonga【senna後継】
■ このスレッドは過去ログ倉庫に格納されています
トリトンのように、テーブル作成時にcharsetを指定すればujisが使えると思っていたのですが invalid utf8 string(1) on grn_str_charlen_utf8というエラーが出て、 結果も思ったようなものになりません。 mroongaでujisのテーブルを使うには何か特別な処理が必要なのでしょうか? CentOS5のRPMを使っています。 Apache Solrでいいじゃん。 みんな使ってるし。 終了 ソーラーってmysqlに全文検索を追加できるの? 使い方は別物じゃね 名前に-を含んだデータベースを作る →groongaのテーブルを作る →テーブルを削除しようとする →エラーで削除できない 俺だけ? SQLだとどうやっても削除できないから手でファイルを直接いじったよ solrって最小のvpsで動かなかった tritonnとhyperestraierでうまくいった ラッパーモードのmyisamでdrop indexしたらエラーになる? innodbならOKだった 色々検索したらmyisamはあんまり推奨じゃない感じかな そもそもmyisamとの相性が悪いからgroonga開発したらしいし まだこれつかうには危険な感じが... ソーラーはmysqlで追加できないと思った ストレージモードでグルーンガファイルをバックアップ→いったん削除→リストア ってやったらmysqlへのアクセスではエラーになった groongaのdbをmysqlのテーブル定義に後から紐づけるのはどうしたらいいんだろ >>11 たしかに若干バギーな感じはある でもトリトンももうmysqlのバージョンが古いしなぁ ログファイル置き場を指定できるようにして欲しい /var/log/mysql/にまとめたいだろJK まだ実用になるレベルではないな とりあえずtritonnを置き換えられるようになってほしい とりあえず使えはするんだよね 運用の際のメンテとかまで考え出すと まだ煮詰まってないなーって思う php、perlはNAMAZUを使って。 レコメンドはvogooでも使えよ。 javaはLucenceでレコメンドはmahountでよくない? SQL_CALC_FOUND_ROWSとlimitとorder byを同時に使うと limitで制限した行数が全行数になるね order byがないと全行数が正確に取れる。 groongaだけなのか、デフォルトの全文検索もそうなのかは検証してないけど とりあえず普通のmyisamは、order byがあっても全行数が変わることはなかった 268 名前:nobodyさん[sage] 投稿日:2011/06/01(水) 17:59:58.68 ID:??? limit a,b 指定で b の抽出件数指定は効くんだけど、a がゼロから効かない。 100,10 や 1000, 10 と指定しても、0, 10 と同じ結果。 フルテキストインデックス再構築したけど同じ。 インストした頃はちゃんと表示されたはずなんだが…。 sennaスレのこれと同じ現象かな? ここにいる人たちは、全文検索を利用している人たちだと思うので質問させてください (別スレにて誘導されました) 皆さんは日本語の全文検索をどのようにされていますでしょうか? Tritonnをみると、MySQLのバージョンが結構古いみたいなのでどうなのかなと思うのですが、 どのように対策をされていますでしょうか? >>15 のように、まだ実用的ではないという事は、Tritonnの方がいいのでしょうか? また、中には自分でN-gramによって対策をしている人などもいるようですが、日本語の全文検索に対する対策は、N-gramとかで自分で実装する、Tritonnなどを入れる以外にはないのでしょうか? groongaとトリトンのベンチマークはかった人いる? なんとなく、体感だけどgroongaが遅い感じがする 0.5秒くらいかかってる もう一度検索したら、0.000数秒でめっちゃ速い それはキャッシュが効いているのか、 一回目の検索でインデックス的なものが整理されたのか分からないけど。 >>22 唯一の答えはないと思いますよ 俺はトリトンからgroongaへの移行を進めていますが 今のところ、どっちかの方があきらかにいい、と言える状況ではないと思います もしかして日本語の全文検索に関してはpostgresqlのほうがいい? groongaを語る夕べ #2 November 29, 2011 12:18 PM http://www.ustream.tv/recorded/18817014 めも バージョンアップしてたから mysql動かしたままupdateしたら groongaがストレージから消えた updateする時はサービス止めてからやらないといけないのかって当たり前か gronnga 1.2.9 has been released. >gronnga 1.2.9 has been released. >>19 の件は直ったのかな? >>30 mroonga 1.10で修正済み。 http://mroonga.github.com/ja/docs/news.html#release-1-10 > FOUND_ROWS()とSQL_CALC_FOUND_ROWSに対応。 ちなみにmroongaは現在1.11が最新。 Fedora15サポート削除早いよって思ったけどソースからビルドしてるので 試したらFedora15でもgroonga 1.2.9動いた groonga-1.2.9 を -d --protocol http でサーバにして動かしていますが、 検索にヒットした文書から、類似した文書を検索することは可能でしょうか? ttp://groonga.org/ja/docs/expr.html によると > 類似文書検索や近傍検索のような高度な検索もすべてgrn_exprによって記述できます。 と書いてありますので select の --scorer に何らかの grn_expr を記述すればできそうにも思うのですが、 文書に含まれる語彙同士の類似度計算をどのように記述すれば良いのでしょうか…orz 2文書間での、類似度の計算法としてはこんなのがあるけど ttp://www.gifu-nct.ac.jp/elec/deguchi/sotsuron/hayashi/node20.html これをじゃぁどうやって grn_exprで書くんだろうねぇ grn_expr のもうちょっと詳細な書き方はこんな文書があるけど ttp://groonga.org/docs/contribution/development/query.html#id4 後の方に載っている「クエリの実例」ってのは多分これC APIとしての書き方じゃないか 類似文書を検索するには、2文書について処理をしなければならないわけだけど、 「ある文書」にアクセスするためには、その文書のカラム名を記載すればいいけど、 「他の文書」にアクセスする方法が分からないから記載できないな >>36 ありがとうございます。重要度を要素に持つベクトルのなす角(cosθ)ですか。 そのページわかりやすいですね。 C API 形式の grn_expr は ECMA Script 形式でも使えるんでしょうかね… いま一つこのあたりのドキュメントがわかりにくくて困っています。 でドキュメントのあちこちに出てくる「(ぐるんしき)」にいちいちイラッとしてみたりw 1. 文書から単語リストを抽出する関数 2. 全文書から指定された単語の重要度を求める関数 3. 2つの配列の積集合を求める関数 4. ベクトルの長さと内積を求める関数 を何とかして書けばできそうですね。 3, 4, はECMA Scriptで書ける(どこで書けばいいのかはわかってませんが)としても 1. 2. って、やっぱり C で書かなあかんのですかね…(´・ω・`) >>37 1. は、全文検索用語彙表に対して、類似している文書を検索したい文書のIDで検索することで求められるかな、と思ったけど よく分からない。 2 の重要度だけど、これは ttp://groonga.org/ja/docs/tutorial/lexicon.html に書いてあるように、語彙表に格納しておくことができそうだけど、事前に計算して入れておかなきゃダメだな。groongaがやってくれるわけじゃないみたい。 だから、grn_exprを生成するRubyとかPerlとかPHPとかCとかのプログラム・スクリプトで一部処理を行うことで実現できそうだけど、 「クエリ『ほげほげ』にヒットする文書に類似する文書」っていうgrn_exprは難しいんじゃないかな。できるのかもしれないけど 29日だがリリースはなしか・・・ 流石に日曜日だとお休みかな groonga 1.3.0 and mroonga 1.20 has been released. バージョンアップきた いまだにテーブル構造変わることがあるのかょ バージョンアップする→古いテーブル残ってる→削除もできない orz mysqld停止した状態で、MySQLデータフォルダ内の、 「データベース名.mrn」で始まる名前のファイルをすべて削除、 そしてデータベース名のフォルダの中の、「groongaエンジンのテーブル名.frm」というファイルをすべて削除、 という操作をすることで消せる ただし誤って変なファイルを消すととんでもないことになるので削除ではなく別のフォルダに移動しておくというのが 望ましい 場所移さずに、 元のファイル名.mouiranaikamo とかにリネームじゃ駄目? なんかあと数回テーブル構造変わるみたい ttp://twitter.com/ktou/status/172078385764372481 groonga 2.0.0 and mroonga 2.00 has been released. mroongaはまた互換性が無いので注意。 メジャーバージョンアップにすぐ手を出して大丈夫だろうか? 様子みた方がいいかな groonga -d でデーモンにしてる方におたずねしたいのですが、 停止するときってどうしてますか? データが壊れやすいと聞いたので kill するのに抵抗があります。 参考: ttp://dupont-kedama.blogspot.com/2011/12/groonga2.html > Q.インデックスやストレージのデータの壊れやすさや壊れるタイミングは? > A.カーネルごと落ちると壊れやすい > プロセルが落ちても壊れるかも > 運が悪いとロックが残る …で今のところこんな感じで書いてるんですが、 (gqtpの場合) # echo 'shutdown' | groonga -c (httpの場合) # wget http://localhost:10041/d/shutdown -o /dev/null -O /dev/null (途中で送信してしまいました) …なんだか自分でもバカっぽい気がします…orz utf8mb4に対応しないのかなぁ… http://groonga.org/ja/docs/executables/groonga.html#cmdoption-e # 指定できるエンコーディング: none, euc, utf8, sjis, latin, koi8r あれ、PostgreSQLだとUTF-8で4バイト対応してるから使えるのかな? centos6用って標準インストールのmysql5.1用にビルドされてるんだね centos5用はmysql5.5との同時提供だから、groonga使うならcentos5の方がいい? groonga 2.0.1 and mroonga 2.01 has been released. メジャーバージョンアップが公開されてすぐアップするのは危険かなと思ってmroonga 2.00へはアップするのはやめといたが そろそろうpしてもいいだろうか・・・ 2.00より前からのアップグレードはDB作り直し必須だけど groonga 2.0.2 and mroonga 2.02 has been released. mysql5.5が含まれてないから5.5.23-1.el6.remi入れたら mysql> INSTALL PLUGIN mroonga SONAME 'ha_mroonga.so'; ERROR 1126 (HY000): Can't open shared library '/usr/lib64/mysql/plugin/ha_mroonga.so' (errno: 2 /usr/lib64/mysql/plugin/ha_mroonga.so: undefined symbol: 以下略 ってなってはいらない・・・ バグでデバック用関数が5.5に無いけど、defineが有効にしてるらしい 対処法は・・・ググれw あと、メモリ解放のなんたらの引数が減ってるので削ると mroongaのソースを調整して再コンパイルすれば動く可能性高い バグあるのかよ しかもかなり根本的な部分で バージョンップアが早いのはいいけどバグあったら即修正版アップしてくれよ groongaに期待するな。 所詮、ユーザー数が少なくて開発者も少ない、 いつ終わってもおかしくないプロジェクトだ あ、すまん、63だけど バグがあるのはmysql5.5のincludeファイルだよ groongaのバグの有無は使ってないから知らんw 良い感じに煮込まれてきたら使おうかとスレを見てるだけなので。はい。 mroongaストレージモードで使用した際 DISTINCTとLIMIT併用したときLIMITで指定した分とってから重複カットしてるから 返ってくるレコード数がLIMITと一致しない バグだよね? LIMITに関するバグは以前あったような 最新Verでも同様ならバグですね 色々やってみてサーバかデーモンで使うのが一番楽だと気づいた >>55 亀レスだけどgroongaのほうは4バイト文字列対応してるぞ MySQLが微妙 queryのエスケープ処理のカオスっぷりハンパねーな mroongaテーブルで全文検索はうまくいくんだけど、 プライマリキーでの検索がちゃんとヒットしない バージョンは1.3.0 俺だけ? こんな単純なところで引っかかるとは・・ プライマリキーも全文検索の対象にしてるの? プライマリキーでの全文検索ってのはできるのかな・・・ オートインクリメントのカラムを別途用意してそっちをプライマリキーにしたほうが安全だと思うが・・・ プライマリキーは全文検索の対象にしてないよ varchar型の数文字の文字列 where id='hoge' みたいにやっても何故かヒットしない。 最近バージョンにしようと思ったけど、何回やっても Can't open shared library 'ha_mroonga.so' (errno: 0 API version for STORAGE ENGINE plugin is too different) って言われる インストールされてるパッケージは groonga-tokenizer-mecab-2.0.3-0 groonga-release-1.1.0-0 groonga-plugin-suggest-2.0.3-0 groonga-2.0.3-0 groonga-libs-2.0.3-0 mysql-mroonga-2.03-0 MySQL-client-5.5.23-1.rhel5 MySQL-server-5.5.23-1.rhel5 いやこれ全部最新版だよね もう疲れたよパトラッシュ groongaのバージョン戻して、 プライマリキーを削除したら検索可能になった それで普通のINDEXなら張り直しても問題ない 原理は不明だけど 昔はVARCHAR型プライマリキーの扱いに問題があったけど 最新バージョンでは大丈夫になってるはずだけどなぁ 最新バージョンはうまく入らなかったから戻したんだよ >>78 yumで入れた場合MySQLとmroongaのバージョン気をつけないとそんなことになった気がする mroongaソースから入れたらいいよ MySQL-server のversion が 5.5.25-1.rhel5 にup されたね おかげで、yum でmysql-mroonga が入るようになった 知っている方が居たら教えて頂きたいんですけど、 今、likeで部分一致を使って検索しているシステムを 全文検索に置き換えたいと思ってます そこでmroongaを試して居たのですが… 「駅」とかで検索した時に、TokenBigram(デフォルト)だと引っかからず 対策としてTokenUnigramにしました TokenUnigramにする事で、「駅」は解決したのですが、 今度は「BOX」がどうにもならず… データにINBOXとかがあり、これが引っかからない… mroongaで「駅」と「BOX」を両立させるうまい手は無いでしょうか 今の環境は、CentOS 6.2でmysqlは5.1.61, mroongaは2.0.3です 全部yumで入れました 結局、 TokenBigramSplitSymbolAlphaDigitで ?mroonga_match_escalation_thresholdを1にして 検索かけたら上手く行った WindowsServerでTritonn使ってます。 システムの移行を考えてて、groonga試したいんだけど、 MySQLのプラグインとしてgroongaを使うのはWindowsでは できませんか? 導入手順ご存知の方がいらっしゃったら教えてください ここ見たのか知らないけど、今ここでWindowsでも使えるように頑張ってるみたい 10月の後半ぐらいには使えるようになるんじゃね? http://redmine.groonga.org/issues/1496 >>88 現在開発中なんですね。 気長に待ちます。 debパッケージからgroonga-server groonga-server-commonがなくなっているような… groonga-server-gqtpに名前が変わったのか groonga-httpdに curl http://localhost:10041/d/status とかすると405 not allowedになるんだけどどうすりゃいいの nginx関連で405で調べるとpostした時のことばかりだし groonga内包のhttpの方は、shutdownで帰ってこない gqtpの方は問題ないんだが… 疲れた groongaをhttpで起動し、 http://localhsot にブラウザでアクセスしたら、 groongaのCPU使用率が100%になって、 応答なし状態になるんだけど、 何が悪いんでしょうか。 以下のコマンドを順番に実行しただけです。 ttp://groonga.org/ja/docs/tutorial/network.html#hypertext-transfer-protocol-http ttp://perl-users.jp/articles/advent-calendar/2011/casual/4 Windows8と2008ServerR2の 両方で再現... 素直にLinux使うべき? mroonga2.04->3.01に変えたら Insert時にgroonga.logに invalid utf8 string(2) on grn_str_charlen_utf8 が出るようになった・・・ 文字コード照合順序はDBも、テーブルも、全文検索用インデックス設定してるカラムも 全部utf8_general_ciにしてる 全文検索の結果も同じ単語で今まで引っかかってたものが 半分くらいしか引っかからなくなってたり、、インデックスが壊れてる? mroonga2.04->3.01に変えたら Insert時にgroonga.logに invalid utf8 string(2) on grn_str_charlen_utf8 が出るようになった・・・ 文字コード照合順序はDBも、テーブルも、全文検索用インデックス設定してるカラムも 全部utf8_general_ciにしてる 全文検索の結果も同じ単語で今まで引っかかってたものが 半分くらいしか引っかからなくなってたり、、インデックスが壊れてる? なんか、grn::dat::Trie::open failedって出るようになってしまってgroongaエンジン系全滅なんだけど。 どうやって復帰すりゃええんですかいの? あ、mysql上なのでmroonga使ってますた 。 結局データの復帰はならず、一時ファイル的なものなので全抹消とあいなりました。 試したこと一覧 ・UNINSTALL PLUGIN、INSTALL PLUGINを実行 → 変化なし ・clearlockを実行(データファーいるの場所がわからず全体に対してclearlock) → 変化なし ・drop table → エラーで動かず ・UNINSTALL PLUGINを実行してからdrop table → テーブル自体は削除OK ・同じDB上でもっかいmroongaエンジンのテーブル作成 → 同様のエラーで作成できず ・DBを変更してmroongaエンジンのテーブル作成 → OK ・現行バックアップできるテーブル(非mroongaエンジン)を退避して、drop database → OK ・DBごと再作成 → OK もうちょっとスマートな解消方法あったんですかね? スレチだったらごめんなさい。 oh... IDが変わってるけど>>96 です。 ちなみに途中でgroonga及びmroongaは1.0.xから3.03にアップデートしますた。 続報 同名DBを作成しなおして同名テーブルを生成し直すとエラー 当然っちゃ当然ですね。 というわけで、DBをもう一回削除しなおした後、mysqlのdataディレクトリ中のmrnファイルをごっそり削除したところエラーは回避。 なんとも不安定な仕組みなもんだね。mroongaは 3.03に切り替えたからか、そもそも不安定なのか、mroongaのupdateがフリーズ(?)するようになってしまった・・・。 ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.1 2024/04/28 Walang Kapalit ★ | Donguri System Team 5ちゃんねる