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/