[groonga-dev,03347] Re: インデックスの情報を詳細出力する方法

Back to archive index

Hiroyuki Sato hiroy****@gmail*****
2015年 7月 6日 (月) 10:17:45 JST


横山様

佐藤です。
ご連絡をありがとうございます。

gemのバージョンをあげたら動作するようになりました。
ありがとうございました。


2015年7月6日 10:10 Masafumi Yokoyama <yokoy****@clear*****>:
> 横山です。
>
> On 2015年07月06日 10:08, Masafumi Yokoyama wrote:
>> 横山です。
>>
>>> `require': uninitialized constant Groonga::Posting (NameError)
>>
>> このエラーですが、RubyGemsが古い場合に起こるようです。
>> RubyGemsのバージョンは以下のコマンドで確認できます。
>>
>>      % gem --v
>
> すみません、オプションを間違えました。
> 以下のどちらかをお使いください。。。
>
>     % gem -v
>     % gem --version
>
>
>> 現在の最新が2.4.8のようなので、もしそれより古いバージョンなら
>> 以下の手順などでRubyGemsをアップデートして試してもらえますか?
>>
>>      % gem install rubygems-update
>>      % update_rubygems
>>
>>
>> On 2015年07月06日 09:29, Hiroyuki Sato wrote:
>>> 須藤様
>>>
>>> 佐藤です。
>>> ありがとうございます。
>>>
>>> Recordの_idとPOSITION情報を出力して、gistに反映しようと思ったのですがgroonga-index-dumpは
>>> 出力が多そうですね。他の方法を考えようと思います。
>>>
>>> 余談ですが私の環境でgroonga-index-dumpを実行すると下記のエラーが出てしまいます。
>>> 私の環境だけですかね?
>>>
>>> ・OSX 10.10.4
>>> ・Ruby 2.2.1
>>> ・rgroonga: 5.0.3
>>>
>>> groonga-index-dump --output-directory /tmp/dd test.db
>>> /path/to/home/.rbenv/versions/2.2.1/lib/ruby/2.2.0/rubygems/core_ext/kernel_require.rb:69:in
>>> `require': uninitialized constant Groonga::Posting (NameError)
>>> from /path/to/home/.rbenv/versions/2.2.1/lib/ruby/2.2.0/rubygems/core_ext/kernel_require.rb:69:in
>>> `require'
>>> from /path/to/home/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/rroonga-5.0.3/bin/groonga-index-dump:23:in
>>> `<top (required)>'
>>> from /path/to/home/.rbenv/versions/2.2.1/bin/groonga-index-dump:23:in `load'
>>> from /path/to/home/.rbenv/versions/2.2.1/bin/groonga-index-dump:23:in `<main>'
>>>
>>>
>>>
>>> 2015年7月3日 21:41 Kouhei Sutou <kou****@clear*****>:
>>>> 須藤です。
>>>>
>>>> In <CA+Tq****@mail*****>
>>>>     "[groonga-dev,03339] インデックスの情報を詳細出力する方法" on Fri, 3 Jul 2015 11:44:18 +0900,
>>>>     Hiroyuki Sato <hiroy****@gmail*****> wrote:
>>>>
>>>>> おかげさまでGroongaの仕組みを詳しく理解することができました。
>>>>
>>>> よかったです!
>>>>
>>>>> https://gist.github.com/hiroyuki-sato/27142229622c74803069
>>>>
>>>>> Groongaの場合、TokenBigramを指定しても2文字ずつに分解を行うのは非ASCII文字の場合のみである。
>>>>
>>>> が少し説明不足で、正規化処理が行われたときだけ↑の挙動になり
>>>> ます。正規化処理をしない場合はASCIIの文字も2文字ずつに分解し
>>>> ます。
>>>>
>>>>> * 文字がASCIIの場合: 単語単位に分割??(ここ怪しい)
>>>>
>>>> 補足すると、連続するアルファベットを1トークンにする(1文字の
>>>> トークンにもなりえるし、3文字以上のトークンにもなりえる)、
>>>> が実際の挙動です。同様に連続する数字も1トークン、連続する記
>>>> 号も1トークンにします。
>>>>
>>>>> selectコマンド等で、POSITIONの情報や全てのRecordの_idを出力する方法は
>>>>> ありますでしょうか?
>>>>
>>>> selectコマンドではできないんです。
>>>> Rroongaにgroonga-index-dumpという実行ファイル(コマンドなん
>>>> ですが、Groongaのコマンドと紛らわしいのでここでは実行ファイ
>>>> ルと書きます)があって、それを使うと出力できます。
>>>>
>>>>     % groonga-index-dump --output-directory /tmp/index-dump DB_PATH
>>>>
>>>> というように使います。そうすると、/tmp/index-dump/ディレクト
>>>> リー以下にモリモリとファイルができます。1トークン1ファイルに
>>>> なっていて、その中にそのトークンのPOSITION情報やレコードのキー
>>>> (_idではないです)が出力されます。
>>>>
>>>> 例えば、るりまサーチというやつのデータベースだとこんな感じの
>>>> ファイルができます。(トークンはURLのように%エンコードされて
>>>> ファイル名になります。)
>>>>
>>>> /tmp/index-dump/Bigram.Entries_description/%21%2A%22%29.dump:
>>>> --
>>>> index: Bigram.Entries_description       term: <!*")>    domain: Bigram  range: Entries  have_section: false     have_weight: false      have_position: true
>>>>     weight        position        term_frequency  record
>>>>     0     360     2       Entries[1.9.3:DL::Importer#bind:bind(signature, *opts) { ... } -> DL::Function].description
>>>>     0     389     2       Entries[1.9.3:DL::Importer#bind:bind(signature, *opts) { ... } -> DL::Function].description
>>>>     0     360     2       Entries[2.0.0:DL::Importer#bind:bind(signature, *opts) { ... } -> DL::Function].description
>>>>     0     389     2       Entries[2.0.0:DL::Importer#bind:bind(signature, *opts) { ... } -> DL::Function].description
>>>>     0     360     2       Entries[2.0.0:Fiddle::Importer#bind:bind(signature, *opts) { ... } -> Fiddle::Function].description
>>>>     0     389     2       Entries[2.0.0:Fiddle::Importer#bind:bind(signature, *opts) { ... } -> Fiddle::Function].description
>>>>     0     360     2       Entries[2.1.0:DL::Importer#bind:bind(signature, *opts) { ... } -> DL::Function].description
>>>>     0     389     2       Entries[2.1.0:DL::Importer#bind:bind(signature, *opts) { ... } -> DL::Function].description
>>>>     0     360     2       Entries[2.1.0:Fiddle::Importer#bind:bind(signature, *opts) { ... } -> Fiddle::Function].description
>>>>     0     389     2       Entries[2.1.0:Fiddle::Importer#bind:bind(signature, *opts) { ... } -> Fiddle::Function].description
>>>> --
>>>>
>>>>> 下記のTermsテーブル・カラムにはインデックスのキーワードがマッチする、
>>>>> Bookテーブルの_idと、レコード内の単語の位置が格納されると思います。
>>>>>
>>>>> 例えば、Groongaという単語は、ISBN2の0文字目、ISBN6の8文字目にあるので、
>>>>> [ISBN2,0], [ISBN6,8]という情報を保持していることになると思います。
>>>>>
>>>>> select文等を使ってその内容を確認したいのですが可能でしょうか?
>>>>
>>>> ということで、selectではできないのですが、groonga-index-dump
>>>> を使うと可能です。
>>>>
>>>>> 下記のクエリだとgroongaは[3,"groonga",4]となっており1件の情報のみしか表示されておりません。
>>>>
>>>> 実は、selectでインデックスカラムを出力すると、そのトークンで
>>>> 検索したときに何件くらいレコードがヒットしそうかという推定値
>>>> が返ります。この挙動は今後変わるかもしれないんですが、今は
>>>> (というかもうずっと)この挙動になっています。
>>>>
>>>> --
>>>> 須藤 功平 <kou****@clear*****>
>>>> 株式会社クリアコード <http://www.clear-code.com/>
>>>>
>>>> Groongaベースの全文検索システムを総合サポート:
>>>>     http://groonga.org/ja/support/
>>>> パッチ採用 - プログラミングが楽しい人向けの採用プロセス:
>>>>     http://www.clear-code.com/recruitment/
>>>>
>>>> _______________________________________________
>>>> groonga-dev mailing list
>>>> groon****@lists*****
>>>> http://lists.osdn.me/mailman/listinfo/groonga-dev
>>>
>>>
>>>
>>
>>
>
>
> --
> 横山 昌史 <Masafumi Yokoyama>
> E-mail: yokoy****@clear*****
> 株式会社クリアコード
> 〒170-0005 東京都豊島区南大塚3-29-9
> Tel: 03-5927-9440
> Web: http://www.clear-code.com/
>
> Groongaベースの全文検索システムを総合サポート:
> http://groonga.org/ja/support/
>
> _______________________________________________
> groonga-dev mailing list
> groon****@lists*****
> http://lists.osdn.me/mailman/listinfo/groonga-dev



-- 
Hiroyuki Sato



groonga-dev メーリングリストの案内
Back to archive index