[groonga-dev,04956] ベクターカラムをテーブル参照検索した結果のsnippetが取れない

Back to archive index
shinonon shino****@jcom*****
2022年 4月 18日 (月) 15:52:52 JST


篠田です。

表題のとおりなのですが、以下の例でスマートに snippet_html を取る方法は
ありますでしょうか?

table_create Mails TABLE_HASH_KEY ShortText
table_create Contents TABLE_NO_KEY
column_create Contents body COLUMN_SCALAR LongText
column_create Contents msgid COLUMN_SCALAR Mails
column_create Mails subject COLUMN_SCALAR ShortText
column_create Mails content COLUMN_VECTOR Contents
column_create Contents index COLUMN_INDEX Mails content
table_create --name Bigram --flags TABLE_PAT_KEY --key_type ShortText --normalizer NormalizerAuto --default_tokenizer TokenBigram
column_create --table Bigram --name mail_index --flags COLUMN_INDEX|WITH_POSITION --type Contents --source body
column_create --table Bigram --name mail_index2 --flags COLUMN_INDEX|WITH_POSITION --type Mails --source subject

load --table Mails
[
  { "_key":"<aaa @ bbb>",
    "subject":"題名です",
    "content":[
      {"body":"plain text", "msgid":"<aaa @ bbb>"},
      {"body":"ワード文書", "msgid":"<aaa @ bbb>"},
    ],
  },
]

select Mails --match_columns subject,content.body --query '題名' --output_columns '_key,snippet_html(subject),snippet_html(content.body)'

→〜"records":[["<aaa @ bbb>",["<span class=\"keyword\">題名</span>です"],null]]}}
  結果:期待通り

select Mails --match_columns subject,content.body --query 'ワード' --output_columns '_key,snippet_html(subject),snippet_html(content.body)'

→〜"records":[["<aaa @ bbb>",null,null]]}}
  結果:NG

select Mails --match_columns subject,content.body --query 'ワード' --output_columns '_key,snippet_html(subject),snippet_html(content.body[1])'

→〜"records":[["<aaa @ bbb>",null,["<span class=\"keyword\">ワード</span>文書"]]]}}
  結果:ベクターカラムの添字を入れれば出力されるが、どの添字がqueryで
        引っかかったものなのかが分からないため、あらゆるケースに対応し
        たスマートな書き方がない。
        例えば、snippet_html(vector_concat(content.body)) みたいな書き
        方はできませんかね? たかが snippet なので最悪それでもいいので
        すが…

※余談
Contents→Mailsへの逆インデックスを作って、
select Contents --match_columns msgid.subject,body --query 'ワード' --output_columns 'msgid,snippet_html(msgid.subject),snippet_html(body)'
とすれば、〜"records":[["<aaa @ bbb>",null,["<span class=\"keyword\">ワード</span>文書"]]]}}
という結果を得られることはできますが、私の実際の使い方では Mails が置
かれているフォルダ(MailIds)という別のベクターカラムで示されるデータも
あるため、結局そこでまた「ベクターカラムをテーブル参照検索した結果が直
接得られない」という問題に戻ってしまいます。


-- 
篠田 敦
shino****@jcom*****



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