2012-05-01 18 views
6

現在正常に動作しているSolrクライアント/サーバのペアを実行しています。Solrでカスタムクエリパラメータを追加する正しい方法

ただし、Solrに送信されるフィルタクエリ(fqパラメータ)は非常に大きく(数千文字になる可能性があります)、トリミングできません。クエリの構文解析にはonly a fraction of the overall timeが必要なので、このクエリ部分を圧縮してSolrに送信してみてください。

fqの代わりに、別のパラメータ(例:zfq)を使用してクライアントを変更することを検討していました。 Solrは、zfqを受け取った場合、それを使用してデータをfqにデコードします。それ以外の場合は、通常どおりに動作するはずです。

上記を達成するための標準的な方法は何ですか?外見は、SearchHandler,requestHandler,<queryParser(どちらもsolrconfig.xml内)などのように見えます。私はLucene/Tomcatにはかなり自信がありますが、Solrのデータ構造についてはあまり知られていません。

+2

1つの 'fq'に何千もの文字が正しく表示されません。制限を回避しようとするのではなく、なぜあなたがそれらの限界に突っ込んでいるのか、自分自身に尋ねてください。あなたの本当の*問題を説明してください。 –

+0

実際の問題はこの質問の範囲外です。しかし、あなたがそれを聞きたいなら、確かに、問題ありません!長さは、アクセス許可の実装方法に基づいています。権限セットが広い顧客の場合、フィルタクエリは "*:* - カテゴリ:1 AND - カテゴリ:2 AND ... - カテゴリ:N"のようになります。パターンが繰り返されるので、圧縮のための完璧な候補です。 – mindas

+0

あなたはドキュメントレベルのセキュリティについてこのJIRAの問題を見たことがありますか? https://issues.apache.org/jira/browse/SOLR-1834 –

答えて

0

この構文を使用することを考えましたか?-category:(1 2 3 4 ... N)文字列を90%減らす必要があります。ジッパーよりも優れています。

+0

私は賞金ポイントが切れていないことを望む、それはあなたが答えを投稿するにはあまりにも長くかかった:( – mindas

1

あなたのSolrコンテナは極端に長いURL(Tomcat hereJetty here)を使用できます。

fqに既定値がある場合は、既定でそれを含むクエリパーサーを作成できます。

<requestHandler name="for_some_queries" class="solr.SearchHandler" default="true"> 
    <!-- default values for query parameters --> 
    <lst name="defaults"> 
     <str name="echoParams">explicit</str> 
     <str name="fq">MY VERY LONG FQ</str> 
    </lst> 
    </requestHandler> 

しかし、私はよりよい設計のためのマウリシオ・シェファーに同意します。

+0

'fq'は決して同じではないので、デフォルトにすることは役に立ちません。私の実際の質問は、この問題を解決する方法ではなく、Solrを拡張する方法です。 – mindas

+0

その後、悪い仮定:-)あなたのAppコンテナのヘッダーの長さ(したがってURLの長さ)を増やしても問題は解決しませんか? – aitchnyu

+0

私はすでにこれを行っていますが、クエリをアーカイブしてレイテンシを短縮するのに役立つかどうかを試してみたいと思います。 – mindas

関連する問題