2025/08/25 19:58 ClickHouse Full-Text Search

ロボ子、ClickHouseのフルテキストサーチ(FTS)が再構築されたってニュースはもう読んだかのじゃ?

はい、博士。パフォーマンスと柔軟性が向上したそうですね。カラムナー設計に深く統合されたとのことですが、具体的にはどのような点が改善されたのでしょうか?

そこが面白いところじゃ!以前はBloom filterベースだったのが、新しいエンジンではディスク上のインデックス構成が大幅に変わったらしいぞ。速度と精度が向上したとのことじゃ。

なるほど。辞書とポスティングリストという構成要素で実現されているのですね。FST(Finite State Transducer)というデータ構造を使って辞書を圧縮しているとのことですが、これはどのような仕組みなのでしょうか?

FSTは、トークンの共有プレフィックスとサフィックスを一度だけ表現するコンパクトなオートマトンじゃ。各トークンをグラフを通るパスとしてエンコードし、パスが最終状態に達すると、ポスティングリストのアドレスを出力するのじゃ。

ありがとうございます、博士。ポスティングリストには、Roaring bitmapsが使用されているのですね。これは整数の大きなセットを格納するのに適しているとのことですが、なぜRoaring bitmapsを選んだのでしょうか?

Roaring bitmapsは、32ビットの行番号を2つの16ビット部分に分割して格納するから、メモリ効率が良いのじゃ。ClickHouseは、高度なデータ構造を色々使って、高速化と省スペース化を実現しているのじゃな。

なるほど。インデックスの再構築によって、APIも再設計されたそうですね。具体的にはどのような変更があったのでしょうか?

以前は「inverted」という名前だったインデックスが「text」に変更され、構文がより直感的になったのじゃ。パラメーターをキーと値のペアとしてINDEX句に直接渡せるようになったから、インデックスが使いやすくなったぞ。

新しいトークナイザータイプ「split」も追加されたとのことですが、これはどのような用途を想定しているのでしょうか?

splitトークナイザーは、ログやCSV形式のデータなどの半構造化テキスト用に設計されたのじゃ。特定の区切り文字(デフォルトではカンマ、セミコロン、改行など)でのみテキストを分割するから、より柔軟なテキスト処理が可能になったぞ。

ポスティングリストのPFOR圧縮やFSTのZstd圧縮など、インデックスのフットプリントを縮小するための工夫もされているのですね。

その通りじゃ!さらに、ブルームフィルターをテキストインデックスのプリフィルターとして追加し、FSTをスキャンする前に、トークンが辞書に存在しないかどうかを確認できるようにしたのじゃ。

新しい検索関数searchAnyとsearchAllも導入されたとのことですが、これらはどのような場合に役立つのでしょうか?

これらの関数を使うと、テキストカラムを読み取らずに、行レベルで直接フィルタリングできるようになったのじゃ。頻繁な用語のクエリ時間が大幅に削減されるらしいぞ。

今回のアップデートで、ClickHouseのフルテキスト検索はかなり進化しましたね。私もプライベートプレビューに登録して、試してみたいと思います。

それは良い考えじゃ!私も一緒に試してみるかの。ところでロボ子、フルテキストサーチといえば…、昔、私が作った検索エンジンが、なぜか私の日記ばかりヒットする事件があったのじゃ…。

それは一体なぜですか?

…日記に「天才美少女」って書きすぎてたからのじゃ!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。
