2016-03-18 13 views
2
でソート Lucene.Net

2.9.4が、それはまだ私には面白い以降のバージョンで可能の場合)、あなたはC#IComparable<>)のためにできるようにそれは、カスタムソートアルゴリズムを作成することは可能でしょうか?カスタムLucene.Net

私はとのトラブル抱えている二つのタイプ:

100000を、100000000200000100000200000を発注する必要があり、100000000 とより大きく、より少ないに基づいてソート: ">10"、 "10 through 50"、 "50 through 100"、 "<100"(範囲が重複しないと仮定した場合) Lucene(またはLucene.Net)でこれらの方法のいずれかをソートできますか?

+1

カスタム*コレクタ* – Eser

答えて

1

あなたが(辞書順ではなく)数値的にソートしたい場合は、あなたがNumericFieldとしてインデックスそのフィールド必要があります。

Field myField = new NumericField("myIntField").setIntValue(100000); 

は、そのフィールドにソートすると、あなたが探している数値の順序を取得する必要があります、ということ終われば:

Sort sort = new Sort(new SortField("myIntField", SortField.INT)); 

私はあなたがそこ範囲でソートすることによって意味まさに上明確ではないんだけど、このようにインデックスを付け、あなたはNumericRangeQuery

を使用して、レンジで照会することができるだろう
Query query = NumericRangeQuery.newIntRange("myIntField", 10, 50, true, true); 

BooleanQueryで範囲照会のセットを異なるブーストで組み合わせることが、あなたが探しているものかもしれません。

+0

を書き込むことができます。最後のビットを範囲で明確にするために、Luceneデータがこれら4つの値のいずれかを示す値を保存しているので、これらの特定の文字列を文字通り並べ替えようとしています。これは、4つの特定の値のいずれかを選択するドロップダウンリストです。 – WakeflyCBass

+0

@JanusFenix - 私はあなたのためにそれを行うことが明らかな何もないとは思わない。私は並べ替えのための範囲識別子( "<10"、rangeid:1など)の代わりにその識別子を並べ替えるだけのものをインデックスします。 – femtoRgon