検索インデックス・フィルター処理のベスト・プラクティス

DSE Searchクエリーのベスト・プラクティス。

DataStaxでは、DSE Searchでクエリーを実行する際に以下のベスト・プラクティスに従うことを推奨しています。
  • CQLを使用して検索クエリーを実行します。

    クエリーによる削除を除き、CQLですべてのデータ操作を実行します。

  • クエリーに必要な型の条件を満たす、最もシンプルで適したSolr型を使用します。「インデックス・フィールド型の定義」を参照してください。
  • 検索インデックスを作成する際、プロファイルを使用します。
  • インデックス作成中のノードにクエリーを実行するのは避けてください。

    DSE Searchは、クエリーに応答するために、検索インデックスの作成を実行していないノードをインデックス作成中のノードより高いランクに設定します。インデックス作成中のノード以外にクエリーを満たすノードがない場合、そのクエリーは失敗しませんが、部分的な結果のみを返す可能性があります。

  • vnodeを使用していない場合、クエリーが実行されたデータ・センター(DC)内のノード数がそのDCのレプリケーション係数(RF)の倍数に等しい場合にDSE Searchの分散クエリーは最も効果的です。
  • 以下のように、クエリーに使用する単語の数をあまり多くしないでください。
    SELECT request_id, store_id FROM store_search.transaction_search WHERE solr_query='{"q":"*:*","shards.failover":true,"shards.tolerant":false,"fq":"store_id:store1a store_id:store2b store_id:store2c ... store_id:store19987d"}'
    代わりに、単語フィルター・クエリーを使用します。
  • コレクションの更新がほとんどない状態でコレクションを書き込む場合、DataStaxではfrozen以外のコレクションにまたがるfrozenコレクションでクエリー・レイテンシーに対処することを推奨しています。
    たとえば、テキスト要素のシンプルなfrozenセットを以下に示します。
    CREATE TABLE foo (id text, values frozen<set<text>>, PRIMARY KEY (id)) CREATE TYPE name (first text, last text)
    UDTのfrozenリスト:
    CREATE TABLE tableWithList (id text, names frozen<list<frozen<name>>>, PRIMARY KEY (id))