0

私はを使用してSolr 4.0います。私は約100万以上のレコードを持っています。

私の質問を説明する最良の方法は、例を通してです-

スキーマに名前とタイプ(タイプはファセット)の2つのフィールドがあるとします。

私は4つのレコードを持っています-

    name                  type
stackoverflow        Knowledge markets
meta stackoverflow   Knowledge markets
ask ubuntu           Knowledge markets
programmers          Q&A for programmers

ここで、最初の2つのレコードSolrを照会すると、カウント2が発生します。q=name:*stack*facettypeKnowledge markets

次に、ファセットで最大のカウント(この場合はその)を取得し、再度Knowledge marketsクエリを実行して、最初のクエリで発生したレコードを無視する必要があります。これが推奨事項のセクションに表示されます。Solrq=type:Knowledge marketsask ubuntu

上記のことを1つのクエリで実行することは可能ですか?

4

1 に答える 1

1

クエリを実行する前にファセット結果を決定する必要があるため、これが1つのクエリでのみ可能かどうかはわかりません。考えられるオプションの1つは、最初にファセットのみのクエリを実行して最大のファセットカウントを取得してから、2番目のクエリを実行することです。

したがって、オプションが検索結果を返さない&q=name:*stack*&rows=0&facet.field=type&facet.limit=1場所を最初にクエリすると、ファセットのみが返され、1つの結果のみが返されます。これは、最も高い値である必要があります。rows=0facet.limit=1

次に、2番目のクエリを実行して、選択したタイプに関連付けられているすべての名前を取得できます。

編集: Junaidからさらに説明した後、元の結果がまだ必要であることが判明したため、上記のリストはファセット結果を取得するためにのみ機能します。以下が機能するはずです。最初にのデータをq=name:*stack*取得し、最大のファセット値を取得します。次にq=type:Knowledge markets AND -name:*stack*、推奨事項のタイプ結果値を取得するなどの別のクエリを実行しますが、最初のクエリから名前の値を除外します。

于 2013-01-10T13:02:59.063 に答える