この問題を解決するために使用する作業量は、処理している保存済みクエリの数に直接関係しています。
20年以上前に、保存されたクエリをミニドキュメントとして扱い、すべての必須用語と用語に基づいてインデックスを作成することで処理しました。新しいドキュメントの用語リストは、この「クエリのデータベース」に対する一種のクエリとして使用され、実行する可能性のある興味深い検索のリストを作成し、それらの検索のみが新しいドキュメントに対して実行されました。これは複雑に聞こえるかもしれませんが、保存されているクエリが少なく(たとえば、10,000〜1,000,000以上)、ブール検索と類似性ベースの検索のハイブリッドをサポートする複雑なクエリ言語を使用している場合は、クエリの数が大幅に減少します。フルオンクエリとして実行する必要がありました。多くの場合、10または15クエリ以下です。
助けになったのは、全体の水平方向と垂直方向を制御できることでした。クエリパーサーを使用して解析ツリーを構築し、それを使用して、クエリのインデックスを作成した用語のリストを作成しました。選択されたクエリの数が急増する可能性があるため、保存されたクエリで特定の種類のワイルドカードを使用しないようにお客様に警告しました。
コメントの更新:
簡単な答え:わかりません。
より長い答え:私たちはカスタムビルドのテキスト検索エンジンを扱っていましたが、そのクエリ構文の一部により、特に重点を置いて、特定の方法でドキュメントコレクションを非常に効率的にスライスすることができましたdate_added
。1日に4〜10,000,000の新しいドキュメントを取り込み、64MBのメインメモリを備えたDEC Alphaで最大1,000,000以上の保存されたクエリに対してそれらを実行していたため、多くのゲームをプレイしました。(これは80年代後半/ 90年代前半でした。)
と同等のフィルタリングは、最後にクエリを実行した日付、または最後のクエリ実行時date_added
に最も高い日付と組み合わせて使用できると思います。id
変更されたレコードに対してクエリを再実行する必要がある場合はid
、クエリの一部として使用できます。
私がもっと具体的にするためには、あなたが解決しようとしている問題とあなたが達成しようとしている解決策の規模について、もっと具体的にしなければならないでしょう。