2016-03-18 7 views
2

In Lucene.Net (2.9.4, aber wenn es in einer späteren Version, die noch interessant für mich möglich ist), ist es möglich, zu schaffen Algorithmen benutzerdefinierte Sortierung, wie können Sie für C# (IComparable<>)?Sortierung Gewohnheit in Lucene.Net

Zwei Typen, die Ich habe Probleme mit:

100000, 100000000, 200000100000 bestellt werden sollte, 200000, 100000000 und Sortierung auf Basis von weniger als, größer als: ">10", "10 through 50", "50 through 100", "<100" (wobei angenommen wird, dass sich die Bereiche nicht überschneiden) Ist eine der folgenden Möglichkeiten in Lucene (oder Lucene.Net) möglich?

+1

Sie können einen benutzerdefinierten * Collector schreiben * – Eser

Antwort

1

Wenn Sie numerisch sortiert werden soll (im Gegensatz zu lexikografisch Gegensatz), sollten Sie als das Feld Index NumericField:

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

das getan haben, auf diesem Feld Sortierung sollte die numerische Reihenfolge der Sie suchen erhalten :

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

ich nicht klar bin, was genau meinen Sie sich durch Bereiche, die durch das Sortieren, aber auf diese Weise indiziert, würden Sie in der Lage sein, durch Bereich abzufragen, ein NumericRangeQuery

mit

Kombinieren Sie eine Reihe von Bereich Abfragen in einem mit verschiedenen Boosts möglicherweise, was Sie dort suchen.

+0

Um auf das letzte Bit mit den Bereichen zu klären- Ich versuche buchstäblich, diese spezifischen Strings zu sortieren, da die Lucene-Daten Werte gespeichert hat, die einen dieser vier Werte sagen. Dies ist für eine Dropdown-Liste, in der Personen einen dieser vier spezifischen Werte auswählen würden. – WakeflyCBass

+0

@ JanusFenix ​​- Ich glaube nicht, dass es etwas Offensichtlich Out-of-the-Box, die das für Sie tun würde. Ich würde einfach eine Art Bereichskennung für sie einsortieren (wie range: "<10", rangeid: 1 usw.) und stattdessen nach dieser Kennung sortieren. – femtoRgon