ngtokuの日記

主に雑記帳です。SNSではngtokuのID取れなかったんで、別のIDでやってます。

Groonga 6.1.2 on CentOS 7.3

引き続き、ちょっと気になったので少しだけ触ってみた。
手順は以下。
1.Groongaインストール
2.軽く検証

1.Groongaインストール
  これだけ。Elasticsearchは色々入れたけど、こっちはちょっと触るぶんにはこれだけで良さげ。

# rpm -ivh http://packages.groonga.org/centos/groonga-release-1.1.0-1.noarch.rpm
# yum makecache
# yum install -y groonga
# yum install -y groonga-tokenizer-mecab
# yum install -y groonga-normalizer-mysql
# yum install groonga-httpd

2.軽く検証
  とりあえず住所漢字とカナだけ入れたテーブルを定義。

# vi table.ddl
table_create text TABLE_PAT_KEY UInt32                                          
column_create text full_address_kana COLUMN_SCALAR LongText                     
column_create text full_address_kanji COLUMN_SCALAR LongText                    
table_create text-text TABLE_PAT_KEY ShortText --default_tokenizer TokenBigram  
column_create text-text index COLUMN_INDEX|WITH_SECTION|WITH_POSITION text title
,text

  作った定義を反映させ、サービス再起動。

# groonga -n /var/lib/groonga/db/tokudb < table.ddl
# chown groonga:groonga /var/lib/groonga/db/tokudb*                                                                                                               
# systemctl restart groonga-httpd

  デフォルトだとport 10041でサービス提供しているが、tokudbって別のファイル作ってしまったので、別ポートでサービス立ち上げる。

# groonga -p 8080 -d --protocol http /var/lib/groonga/db/tokudb

  この時点でブラウザから http://マシンのIPまたはホスト名:8080/ で色々確認可能。
  そして検索用データをとりあえず二件投入。日本語検索失敗した時のため、full_address_kanaにxxxxxxのレコードも入れておく。

# curl -X POST 'http://localhost:8080/d/load?table=text' -d '[{"_key":90600000,"full_address_kana":"ホッカイドウサッポロシチュウオウク","full_address_kanji":"北海道札幌市中央区"}]'
# curl -X POST 'http://localhost:8080/d/load?table=text' -d '[{"_key":90600001,"full_address_kana":"xxxxxx","full_address_kanji":"北海道札幌市中央区"}]'

  検索。うまく日本語でも検索できた。結果は見やすい様に改行をいれてある。

# curl 'http://localhost:8080/d/select?table=text&match_columns=full_address_kanji&query=北海道'     
    [
        [0,1483431027.866515,0.9462976455688477],
        [
            [
                [2],
                [["_id","UInt32"],["_key","UInt32"],["full_address_kana","LongText"],["full_address_kanji","LongText"]],
                [1,90600000,"ホッカイドウサッポロシチュウオウク","北海道札幌市中央区"],
                [2,90600001,"xxxxxx","北海道札幌市中央区"]
            ]
        ]
    ]

  続いて、アナライズ確認。MeCab指定なので、結果はElasticsearchの時と同じだが、iPhoneiphoneな所が異なる。
  この辺は設定かな。

# groonga                                               
> register normalizers/mysql                                                    
    [[0,1483431378.979351,0.0401461124420166],true]                                 
> tokenize TokenMecab "iPhoneは人々の生活を一変させました。" NormalizerAuto     
    [
        [0,1483431439.346163,0.2017147541046143],
        [
            {"value":"iphone","position":0,"force_prefix":false},
            {"value":"","position":1,"force_prefix":false},
            {"value":"人々","position":2,"force_prefix":false},
            {"value":"","position":3,"force_prefix":false},
            {"value":"生活","position":4,"force_prefix":false},
            {"value":"","position":5,"force_prefix":false},
            {"value":"一変","position":6,"force_prefix":false},
            {"value":"","position":7,"force_prefix":false},
            {"value":"","position":8,"force_prefix":false},
            {"value":"まし","position":9,"force_prefix":false},
            {"value":"","position":10,"force_prefix":false},
            {"value":"","position":11,"force_prefix":false}
        ]
    ]