Lucene.Net 3.0.3 に 1,000,000 個のドキュメントに一致するクエリがあり、各ドキュメントには一意の値を持つ ProductID という名前のフィールドがあるとします。特定の ProductID の直後に次の 10 個のアイテムを取得するにはどうすればよいですか?
たとえば、ProductID 4264423
の次の 10 個のアイテムを取得します。ProductID は、1,000,000 件の一致内のどこにでもあり、任意に並べ替えることができます。
強引な解決策の 1 つは、すべての ScoreDocs をループ処理し、FieldCache を使用して正しい ProductID を見つけ、次の 10 を取得することです。ただし、巨大な ScoreDocs 配列にデータを入力する必要があるため、これは非効率的です。
もう 1 つのアイデアは、FieldCache と共にカスタム Collector を使用して正しい ProductID を探すことですが、私の知る限り、Collector はソートされていません。
おそらく解決策は、カスタム Collector と PriorityQueue を組み合わせて使用し、FieldCache を使用して正しい ProductID を見つけ、そのドキュメントのスコアを書き留めてから、スコアに基づいて次の 10 項目を取得することです。(ただし、同様の Score 値がある場合、それはどのように処理されますか?)
私は Lucene.Net の初心者なので、コード サンプルを提供してください。(サンプル コードは C# であることが望ましいです。)
カスタム コレクター + PriorityQueue が実行可能なオプションである場合は、次のサンプル コードを参照してください。