8

私は自分の問題の解決策を探すのに何時間も費やしました。私が達成しようとしていることに近い質問をする人を見てきましたが、今のところ誰も同じ質問をしていないようです。これを適切に説明できるかどうか見てみましょう。

私が靴屋だとしましょう。私の Web サイトには 3 つのページがあります。1 つは男性用の靴、もう 1 つは女性用の靴、もう 1 つは子供用の靴です。私の靴のテーブルにフィールド prod_group があるとしましょう。したがって、男性用ページの場合、クエリは q=prod_group:men になります。ここで、私が提供したいファセットの 1 つがブランドであるとしましょう。q=prod_group:men&filter.field=ブランド

私が抱えている問題は、ファセットの結果が、メンズ シューズに関連するブランドだけでなく、データベース内のすべてのブランドを表示していることです。つまり、「マイリトルポニー」シリーズにメンズシューズがゼロということはすでに知っています。ブランド ファセットに My Little Pony を表示したくありません。facet.mincount の設定も必要なものではありません。クエリ q=prod_group:men&fq=color:red&filter.field=brand を実行すると、クライアントはブランド「Mighty Joe」に赤い靴がないことを消費者に示したいので、ファセット数が のファセットが必要です。 0.

基本的に私が望んでいるのは、ベースクエリの結果に基づくファセット結果です。これまでのところ、これを達成する唯一の方法は、2 つのクエリを実行することです。最初のクエリは基本クエリのみで、facet.mincount = 1 を設定して関連するファセットのリストを取得し、次に facet.mincount を 0 に戻して実際のクエリを実行します。既に行われたファセットの選択に基づいて、利用できなくなった特定のオプションをいつグレー表示するかを理解できます。

2 つのクエリを実行するのは、エレガントとは言えません。facet.pivot は長期的には役立つかもしれませんが、私たちはまだ 3.x を使用しており、すぐに変わるとは思いません。1 つのクエリで必要なことを実行するクエリ/スキーマ/構成オプションを見逃していませんか?

4

3 に答える 3

3

適用されたフィルターに関係なく、ファセットを返すことができるようにするFacet Exclusive Filtersと呼ばれる 1 つのオプションを確認できます。

たとえば、facet.mincount 1 で
男性をフィルタリングすると、このフィルターに適用可能なすべてのブランド ファセットが返されます。 次に、いくつかの色でサブフィルターをかけると、除外フィルターを使用して、結果を含む 1 つとフィルターなしの 2 つのファセットを取得できます 。fq=prod_group:men
fq=color:red
fq={!tag=dt}color:red&facet.field={!ex=dt key=nonfilter_brand}brand&facet.field=brand

これにより、フィルターを使用した場合と使用しない場合の両方のファセットが提供され、クライアント側で違いをグレー表示するために使用できます。クライアント側に多少のオーバーヘッドがありますが、単一のクエリを実行するだけで済みます。

于 2012-10-19T09:52:16.623 に答える
0

facet.queryオプションを見たことがありますか。説明から、それはあなたが必要とするものを達成するように思えます.

このパラメーターを使用すると、Lucene の既定の構文で任意のクエリを指定して、ファセット カウントを生成できます。デフォルトでは、ファセットは「フィールド」の一意の用語の数を返しますが、facet.query を使用すると、任意の用語または式の数を決定できます。

于 2012-10-18T19:28:23.230 に答える
0
fq=prod_group:men

パラメータの場合はそうではありませんが、ファセット結果にもフィルタリングを適用できqます。

于 2012-10-19T10:29:46.433 に答える