[groonga-dev,03942] Re: ベクターカラムの全文検索について

アーカイブの一覧に戻る

Kouhei Sutou kou****@clear*****
2016年 2月 18日 (木) 09:56:36 JST


須藤です。

In <CANUhGj1hMj+UEAF=jrcN7****@mail*****>
  "[groonga-dev,03941] Re: ベクターカラムの全文検索について" on Thu, 18 Feb 2016 09:09:13 +0900,
  Seto Ryuta <rseto****@gmail*****> wrote:

> ベクターカラムのタグ検索(一致検索)とドリルダウンは、以下のような形で参照テーブルを使っていたのですが、
> 同じような設定で全文検索をしようとすると語彙表にデータが登録されなかったため、質問をさせていただきました。
> (スキーマのどこかが間違っていると思うのですが。。。)
> ベクターカラムの全文検索についてはShortTextを型として利用することに致します。ありがとうございました。

参照型の(ベクター)カラムの値に対して全文検索する場合は「ネ
ストした検索」機能を使う必要があります。(もっとパッとした名
前があるといいなぁと思っています。。。)

ドキュメントではここらへんで触れられているやつです。
  http://groonga.org/ja/docs/tutorial/match_columns.html#nested-index-search-among-related-table-by-column-index

今回の例だと↓のようにすると使えます。
ポイントは

  * Vector._keyに対して全文検索用のインデックスを作ること
  * VectorにEntry.vectorに対するインデックスを作ること
  * 検索するときはvector._key @ "..."とすること

です。
一番大事なことは真ん中の「VectorにEntry.vectorに対するインデッ
クスを作ること」です。これにより、Vector._keyでヒットした要
素を含むEntryのレコードを見つけることができるようになります。

このあたりの動きは絵を描くとわかりやすいんですよねぇ。
「Groongaで学ぶ全文検索 2016-02-26」
https://groonga.doorkeeper.jp/events/39274
に来てもらえれば絵を描いて説明します。

あ、そういえば、今回は19:30から開場していて、20:00前に来た人
向けに個別に相談を受け付ける予定です。

--
table_create Entry TABLE_HASH_KEY ShortText
table_create Vector TABLE_PAT_KEY ShortText
column_create Entry vector COLUMN_VECTOR Vector

table_create BigramTerms TABLE_PAT_KEY ShortText \
  --default_tokenizer TokenBigramSplitSymbolAlpha \
  --normalizer NormalizerAuto
column_create BigramTerms vector_key COLUMN_INDEX|WITH_POSITION Vector _key

column_create Vector entry_vector COLUMN_INDEX Entry vector

load --table Entry
[
{"_key":1, "vector":["Head First Groonga", "Head First Mroonga"]},
{"_key":2, "vector":["Head First Mroonga", "Head First Rroonga"]}
]

select --table Entry --filter 'vector._key @ "Rroonga"' --output_pretty yes
# [
#   [
#     0,
#     1455756640.40757,
#     0.000497341156005859
#   ],
#   [
#     [
#       [
#         1
#       ],
#       [
#         [
#           "_id",
#           "UInt32"
#         ],
#         [
#           "_key",
#           "ShortText"
#         ],
#         [
#           "vector",
#           "Vector"
#         ]
#       ],
#       [
#         2,
#         "2",
#         [
#           "Head First Mroonga",
#           "Head First Rroonga"
#         ]
#       ]
#     ]
#   ]
# ]
--


-- 
須藤 功平 <kou****@clear*****>
株式会社クリアコード <http://www.clear-code.com/>

Groongaベースの全文検索システムを総合サポート:
  http://groonga.org/ja/support/
パッチ採用 - プログラミングが楽しい人向けの採用プロセス:
  http://www.clear-code.com/recruitment/
リーダブルコードワークショップ:
  http://www.clear-code.com/services/code-reader/readable-code-workshop.html




groonga-dev メーリングリストの案内
アーカイブの一覧に戻る