[groonga-dev,03021] Re: [ANN] Droonga 1.0.9

Back to archive index

Kouhei Sutou kou****@clear*****
2014年 12月 16日 (火) 16:23:07 JST


須藤です。

In <CACECCAphrswyqqRuYEHRJJXAKOPXw=T0vpW****@mail*****>
  "[groonga-dev,03019] Re: [ANN] Droonga 1.0.9" on Tue, 16 Dec 2014 13:45:29 +0900,
  funa 1g <funa1****@gmail*****> wrote:

> GeoPointも利用する予定だったので、あわせて助かりました。

おぉ、よかったです。

GeoPointに関して注意事項があります。
今のGroongaは「点の保存」と「点の検索」のみをサポートしてい
て、「範囲の保存」と「範囲の検索」はサポートしていません。
(「範囲*での*点の検索」はサポートしています。)

そのため、

  ["位置1", "位置2"]

というデータがあった場合、

  * "位置1"または"位置2"
  * "位置1"かつ"位置2"

のような検索はできますが、

  * "位置1"を矩形の左上、"位置2"を矩形の右下とみなした矩形を
    考えて、検索範囲がその矩形を含むかどうか

という検索(範囲の検索)はできません。

実装案はあるんですが、手付かずです。
(実装してやるぜ!という方がいれば説明します!)

> ご推察の通り、タグ検索に利用しようと考えていました。
> 文字列よりも数値のほうが高速に検索できるのではないかと思い、数値へのインデックスを試していたのですが、文字列の参照構造でも同程度の速度になるのでしょうか。

はい、そうです。

インデックスを使った検索の場合は検索時間全体に比べると、文字
列か数値かで大きく変わりません。

シーケンシャルに検索するときは次のように何度も比較をするので
文字列か数値かで速度が変わります。

  1. レコード1を取得してカラムの値が検索値と等しいかチェック
  2. レコード2を取得してカラムの値が検索値と等しいかチェック
  3. ...
  n. レコードnを取得してカラムの値が検索値と等しいかチェック

一方、インデックスを使って検索する場合は次のように最初だけし
か比較しないので検索時間全体ではほとんど差がありません。

  1. 検索値に該当するトークンで検索
     (ハッシュ値やツリー構造を使って検索するので、高速に比
     較できる。)
  2. 1.で検索したトークンに該当する転置インデックスを参照し、
     対象レコードを得る
  3. 2.で得た対象レコードを集める
     (ここでは検索値を使った比較はしない。)


-- 
須藤 功平 <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/




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