2 つの ElasticSearch サーバーがあります。
http://12.13.54.333:9200
と
http://65.98.54.10:9200
最初のサーバーには 100k のデータ ( id
=1 からid
=100k) があり、2 番目のサーバーには 100k のデータ ( id
=100k+1 から 200k) があります。
obama
両方のサーバーで 1 回のリクエストでキーワードをテキスト検索したいと考えています。これは可能ですか?
2 つの ElasticSearch サーバーがあります。
http://12.13.54.333:9200
と
http://65.98.54.10:9200
最初のサーバーには 100k のデータ ( id
=1 からid
=100k) があり、2 番目のサーバーには 100k のデータ ( id
=100k+1 から 200k) があります。
obama
両方のサーバーで 1 回のリクエストでキーワードをテキスト検索したいと考えています。これは可能ですか?
あなたの質問は少し一般的です...「依存する」種類の答えを与えないようにしますが、そうするためには、いくつかの仮定をしなければなりません.
これらの 2 つのサーバーは、実際には同じ Elasticsearch クラスター上の 2 つのノードですか? そうだと思います。
複数のシャードで構成されるelasticsearchインデックスでデータをインデックス化しましたか? そうだと思います。Elasticsearch のデフォルトは 5 つのシャードです。この場合、1 つのノードに 2 つのシャード、もう 1 つのノードに 3 つのシャードを持つことになります。
次に、REST API を介してそれらのノードの 1 つにクエリを送信するだけです。クエリは、クエリ対象のインデックス (複数の場合もある) が構成されているすべてのシャードで実行されます。レプリカがある場合、レプリカ シャードもクエリ時に使用される可能性があります。クエリを受け取ったノードは、すべてのシャードから取得した検索結果を削減し、最も関連性の高いものを返します。
より具体的に言うと、すべてのシャードの検索フェーズでは、ドキュメント ID とそのスコアのみが収集される可能性が高くなります。ヒットしたノードが結果を縮小すると、返されるはずのドキュメントに対してのみ、必要なすべてのフィールド (通常は_source フィールド) を取得できます。
Elasticsearch の優れている点は、異なるインデックスでデータにインデックスを付けたとしても、複数のインデックスにクエリを実行でき、すべてが説明したのと同じように機能することです。結局のところ、すべてのインデックスはシャードで構成されており、それぞれ 1 つのシャードで 10 個のインデックスをクエリすることは、10 個のシャードで 1 つのインデックスをクエリすることと同じです。
私が説明したことは、 elasticsearchが使用するデフォルトのsearch_typequery_then_fetch
に適用されます。必要に応じて最終的に使用できる他の検索タイプがあります。たとえば、reduce も fetch も行わず、すべてのシャードでクエリを実行し、すべてのヒットの合計を返すクエリのヒット数を返すカウントなどです。シャードごとに。
レヴェンドラ・クマール
Elasticsearch がそれを処理する必要があります。Elasticsearch は、分散して分散検索を行うためにゼロから構築されました。
基本的に、これらのサーバーが同じクラスター内にある場合、2 つのシャードがあります (最初のシャードは 1 から 100k までの ID を保持し、2 番目のシャードは 100001 から 200k までの ID を保持します)。何かで検索すると、ヒットするサーバーは関係ありません。両方のサーバーで検索を実行し、クライアントに結果を返します。Elasticsearch の内部動作は広範すぎて、ここでは説明できません。