2

SOLR インデックスを 2 つに分割する必要があります。結局のところ、必要なパーティション情報を表す STRING フィールドが既にあります。つまり、検索されるレコードの種類の 1 つは、文字列フィールドがレコード内に存在し、値が含まれている場所であり、もう 1 つの種類は、値が含まれていない場所です。すべてのクエリで、検索するパーティションを指定する必要があります。負のフィールドクエリを使用してそのフィールドを検索する方が速いでしょうか、-strFld:[* TO *]それとも新しいブールフィールドを作成し、それを「hasStrFld」と呼んで検索する方が良い/速いでしょうか? したがって、strFld が存在しない場合、hasStrFld は false になります。同様に、StrFld にデータがある場合、hasStrFld は true になります。

その他の考慮事項: 将来、インデックスが 3 番目のパーティションに分割される可能性は非常に低く、ブール値の不適切なクエリと負のクエリが不適切になり、列挙値を持つフィールドが考慮されます。ただし、可能性はかなり低く、将来の拡張性よりも今日の高速パフォーマンスの方がはるかに重要です。

4

1 に答える 1

3

実際には、決定する前にいくつかのテストを実行することを検討するかもしれませんが、それらがなければ、おそらく STRING フィールドに頼るでしょう。

  • それはすでにそこにある
  • 特別なブール値フィールドのようなものはありません (私が理解している限り、Solrは文字列トークンを使用してこれを追加します)。

スピードのために私は試してみます:

  • 関連するキャッシングメカニズムを利用するためのフィルター(つまり、fq)として使用する
  • フィールド スコアのブースト/ブースト解除と並べ替え (完全に分割するのではなく)
  • マルチコア アプローチ、コア内のパーティション (実際、これは拡張と保守が容易になる可能性があります)

お役に立てれば。

于 2010-01-29T20:33:23.893 に答える