2016-06-02 5 views
1

複数のSolrコアを使用して、異なるセグメントの製品をインデックスします。例えば1つのインデックスには医薬品(core1)、もう1つには食料品(core2)、3つ目はエレクトロニクス商品(core3)の製品が含まれています。実際には、これらのセグメント内のカテゴリやブランドのコアについてもコアがあります。クエリパラメータに基づくDynamic Solrコアの選択

私が解決しなければならない問題は、ユーザーが何かを検索するときに、これらのコアを認識しないことです。ユーザーが送信するクエリパラメータに基づいています。私は検索する正しいコア/コアを把握したい。例えば、ユーザーのクエリがパラメータに基づいて、../select?q=apple&seg=0x3eを持っていた場合:seg=0x3e Core2の& Core2のは、私が破片を検索して、この作品を作ることができる異なったseg=valueのために、コアの異なるセットが

を検索するものと、検索けどCORE3ないことでしたまた、solrconfig.xmlにシャードを設定します。良いリードはhereでした。このアプローチはあまりにも静的であると思われ、クエリパラメータに基づいてシャードの制限や選択に影響を与えることはできません。

これを行う方法はありますか?カスタムSolrDispathcFilterのようなものですか?

この「負」の答え:)のため

答えて

1

申し訳ありませんおかげで、私は、検索およびSOLRで多くの経験を持っているし、本当に私はあなたが提案する何をしないだろう。

「トピック」でインデックスを分割することは、通常はお勧めできません。手動でのジャグリングを非常に多く行う必要があり、カテゴリ、ドキュメント、コアの数が増えるにつれて維持管理することはできません。最終的にクラスタを設定します(たとえば、指摘どおりに破片)。コアとドキュメントを無差別に追加することができます。メンテナンス上の理由から、コレクションやトピックごとにいつでもドキュメントにタグを付けることができますが、これらをコアにマッピングすることは困難です。

インデックスがすでに分割されている場合、分散インデックスとして扱い、SOLRクエリshardsパラメータを使用してすべてのクエリですべてのコアをヒットさせることができます。ゼロ結果を返す単純な検索クエリは非常に非常に高速で安価であるため、ディスパッチャの作成は気にしません。だから "役に立たない"クエリであなたの "他の"コアを打つことはあまり問題ではありません。この理由から、特殊なディスパッチャを構築することはおそらく価値がありますが、これもやはり手作業では維持するのは難しいです。

ディスパッチャがそれに値する特別なケースがあります。クエリが非常に複雑(異なるフィールドでフィルタリング)で、SOLRが結果を返すことができないと判断するのに時間がかかる場合は、あなたは提案する。 SOLR構成でこれを行う方法はわかりません。独自のクエリハンドラを作成する必要があります。

+0

ありがとう@Hugo。私の問題はまだゼロの結果を得ることではありません。それは無関係のマッチを実際に得ることについてです。私の例に戻る。 「リンゴ」とは「消費財」や「食料品」とは異なる意味です。私は両方のセグメントを持っているので、結果はそのような要求のために不器用になります。あなたは正しくメンテナンス債務を指摘しました。 – prasannaJosium

+1

ok、私が書いたことはまだ適用されていると思います。すべてのドキュメントに必要なコレクション名(たとえばcollection = consumer_goods)を「タグ」し、コレクション制約をクエリに追加します(例:&fq = collection:consumer_goods) –

関連する問題