Solrのクエリの実行順序の分析とフィルタ

I.はじめに

  Solr検索2つの操作で構成されています:リクエストパラメータに一致する文書を検索するために、これらの文書がソートされ、最も関連性の高い試合文書を返します。デフォルトでは、文書は関連性に従って分類されています。、文書のマッチングセットを発見した後、別の操作を必要とする。この手段は、各ドキュメントのマッチングスコアの関連性を計算します。

二つのパラメータとq .Fq

  FQとQ:効果的相関スコアドキュメントをマッチングするドキュメントを検索して計算するには、Solrには2つのパラメータを使用します。FQフィルタパラメータは、qはクエリパラメータを示し、クエリを示します。これら2つのパラメータに渡された同じクエリの構文は同じ文書の数を返しますので、一見すると、これらの2つのパラメータは、区別するために良くないかもしれません。このように、多くの検索は、単一のパラメータqを要求します。これらの2つのパラメータ、検索の差がより効率的に行うことができることを理解されたいです。

  関連性の影響

  FQ:ドキュメントは、クエリ制限に一致します。

  。Q:1文書クエリ制限が一致2は、相関アルゴリズムとスコアの関連用語のリストを提供;.

  したがって、qパラメータは、Solrの相関計算で考慮されるべき用語の指示特殊フィルタ、とみなすことができます。この違いを考慮して、ユーザーによるSolrのユーザキーワードの入力は、パラメータq、機械生成パラメータFQでフィルタを置く傾向があります。

  キャッシュと実行のスピード

  2つの目的のために、メインフィルタクエリクエリから離しておきます。まず、クエリが含まれていないフィルタは、通常、任意のキーワード検索の間で再利用することができます。そのため、フィルタキャッシュでのクエリキャッシュフィルタの結果を考慮してください。関連性スコアは、このセクションのクエリフィルタクエリFQ、FQパラメータの部分に分け、その後、クエリーQを各語彙項目と一致する文書の操作に基づいて計算されなければならないので、第二には、追加の関連性を計算する必要はありません。この処理後、クエリは多くの時間を節約し、フィルタスコア計算の関連部分のためのクエリとして使用することができます。

  複数のクエリとフィルタを指定します

  Solrの要求は、多くのパラメータがFQとして追加が、唯一つのパラメータqを含んでいてもよいです。例えば、2 SolrのクエリーQ =キーワード:Solrの&FQ =カテゴリー:テクノロジー&FQ =年:2020とq =キーワード:Solrの&FQ =カテゴリー:技術と年:2020は、同じ順序で同じ結果文書を返します。各FQ FQパラメータのキャッシュの使用に加えて、[パラメータ]は複数のパラメータを使用して、独立してバッファリングすることができるパラメータFQにこれらのパラメータの組み合わせと機能的に同等FQ。関連性とキャッシュの効果特定の選択肢を検討するために、実際の状況に応じた形態で使用されたパラメータとパラメータを選択します。

  実行順序

  技術的な観点から:

  1.フィルタバッファ内の各パラメータをFQ下さい。ビット[0または1]へのインデックスが対応中の各文書は、文書がフィルタに含まれていることを示すために、前記存在する場合、バッファが返される文書セット、OpenBitSetは、フォームをカプセル化。

  2.フィルタキャッシュでFQパラメータを見つけることができませんが、キャッシュが有効になっている場合は、そのキャッシュので、フィルタの意志インデックスは、新しい文書セットを濾過して。

  3.すべてのフィルタは、文書セットを取得するために、文書セットの交差点] [AND演算を行います。

  4.qパラメータはLuceneクエリの検索として、フィルタ文書セットと一緒に渡されます。クエリの実行、現在整数内部統合されたフィルタオブジェクトIDへのクエリを用いた治療と組み合わせたフィルタバイパスLuceneクエリ[]。クエリ結果と同様の結果オブジェクトIDをフィルタリングする場合は、このIDを収集し、相関処理は、文書の照合スコアの算出を含みます。

  前記文書は、プロセスの一部として収集されたすべての実行後フィルタ、クエリ製交差フィルタ処理が含まれている場合は、文書の唯一の役割は、組合せおよび組成物のフィルターの両方に一致するクエリ。

  キャッシュが有効になっているときに、フィルタは、メインクエリの実行を先行します。特殊なフィルターとしてクエリとフィルターその後収集プロセスで同時に実行し、ポストフィルタは、クエリに一致して、フィルタを使用する文書を発見しました。クエリとフィルタの組み合わせは以下のとおりです。

  

  それは、実際には、真複雑に見えます。Solrには非常によく、この複雑さを隠すこと。しかし、このプロセスは、フィルタ性能の最適化を使用してコストの高さを理解するのに役立ちます。Solrには、より細かい制御は、フィルタのニーズは後に、または同時に、前にメインクエリを備え、実行順序をキャッシュして、フィルタされることを指定することができます提供します。

III。フィルタは、あまりにもコストのかかるプロセス

  フィルタと大幅に処理時間を節約することができるプロセスの関連部分のフィルタバイパスキャッシュ。ただし、すべての状況が同じフィルターです。あなたが検索しようとすると、このフィルタの計算コストが高いかもしれないので、それは、数学的な計算を必要とするような結果は、緯度と経度の地理的な半径のフィルタを指定しました。あなたは場所の数万人のための異なるフィルタを生成したいのであれば、そのように多くのフィルタは、キャッシングのために難しいかもしれません。一部のアプリケーションでは削除された一般的に使用されるフィルタキャッシュで、その結果、オーバーロードされたフィルタキャッシュを引き起こし、例えば、ユニークなフィルタの多くを生成するために、ユニークなIDのフィルタが必要になる場合がありますか、長すぎるウォームアップ時間を検索します。この場合には、Solrのフィルタを制御することができるものは、キャッシュ、およびフィルタの実行順序を決定しなければなりません。

  閉じるフィルタキャッシュ

  いくつかのケースでは、多くのフィルタには、キャッシュする必要はありません。フィルタの最大数に、最も一般的に使用されるフィルタは、状態キャッシュ、最高のパフォーマンスSolrのインスタンスに常にある場合。キャッシュによって引き起こされる重要でないフィルタの過負荷を防ぐには、機能キャッシング特定のフィルタオフの構文を使用することができます。

  FQ = {!キャッシュ=偽} ID:123&...

  フィルタの実行順序を変更します

  検索要求は、複数のフィルタが含まれている場合は、その実行順序の有意な効果がスピードを照会します。一般的な論理からは、結果セットのほとんどは、フィルタを減らすために作る速く文書、フィルタが実行のあまり顔ので、実行する必要があります。同様に、複雑な計算がリストにフィルタを実装を検討してください実行。それほど彼らは処理する文書、コンピューティングリソースは比較的少なくなり、消費しました。フィルタによりコスト、彼らはSolrのの後方を実行できるように、フィルタを定義することにより、実行に伴うコストがかかります。構文次のフィルタを提供するコスト:

  {!コスト= 1} FQ =カテゴリー:テクノロジー&...

  実行コストは、必ずしも連続的ではなく、互いに対して相対的な順序。より大きいまたは100と等しいが、ポストフィルタのコストを可能にするために行われています!

  ポストろ過

  いくつかのケースでは、フィルタの実装コストが非常に高くなり、他のすべてのクエリとフィルタの実行後、再びそれを行うことが望ましいです。Solrにはポストフィルタと呼ばれるフィルタの特殊なタイプを提供しています。このフィルタは、交差処理を照会し、濾過した後に使用されます。コストパラメータをポストフィルタにフィルタを変換するための方法であって、フィルタとして定義されます。> = 100フィルタの実行コストは、フィルタインタフェースを行うポストを使用して、ポスト濾過と考えられます。

  Solrのポストフィルタは、クエリのみとフィルタに適用されるが、ポストフィルタインタフェースを使用したクエリとフィルタのすべてのタイプに適用されていない、クエリの1型を有するFRANGEは、フィルタ機能の後にクエリです。さらに、製剤は、メインフィルタとクエリの実行後にカスタムフィルタを使用して、フィルタプラグインターフェース後に行ってもよいです。

おすすめ

転載: www.cnblogs.com/yszd/p/12294071.html