Wenn ein Tag/Monat-Paar knifflig ist (ich weiß nicht, ob es ist oder nicht), warum nicht ein Feld von "ihrem Geburtstag 1980" haben (ob sie damals lebten oder nicht). Dann müssen Sie nur die Suche gegen 1980 durchführen. Dies ist effektiv ein Tag/Monat Paar, aber in einem Typ gespeichert, den Sie problemlos verwenden können.
Beachten Sie, dass 1980 ein Schaltjahr ist, weshalb ich es gewählt habe - sonst könnten diejenigen mit einem Geburtstag vom 29. Februar schwer darzustellen sein.
Alternativ kann ein „Tag/Monat“ Paar in Form einer ganzen Zahl:
(100 * month) + day
würden Sie eine einfache Darstellung geben, die suchen und Index wäre leicht. Ich habe normalerweise festgestellt, dass das Speichern von Daten in einem einzelnen Feld einfacher ist als die Verwendung von zwei Feldern. Dann wieder habe ich nie Solr verwendet ...
EDIT: Ich hatte eine andere Idee. Es ist ein bisschen mild, aber auch so ...
Speichern Sie die Geburt Datum in einem Format, das effektiv Monat, Tag, Jahr ist. Ich weiß nicht, ob Solr es leicht in MM/tt/Format tun könnte und dann eine lexikographische Ordnung suchen, aber die Alternative ist
(100000 * month) + (1000 * dayOfMonth) + (year - 1900)
(Dies wird vorausgesetzt, Sie brauchen es nicht geboren zu speichern Daten früher als 1900. Ich bin sicher, Sie können es anpassen.)
Sie können immer noch das ursprüngliche Geburtsdatum wiederherstellen, aber die Bestellung wird in Geburtstagsreihenfolge sein, mit der ältesten Person zuerst für ein bestimmtes Datum.
Es bedeutet, es ist schwer zu sortieren Menschen nach ihrer tatsächlichen Alter obwohl. Ich weiß nicht, ob das ein Problem für dich ist.
Wie auch immer, wie ich sagte, es ist ein bisschen off-the-wall, aber es könnte :)
Okay, großartig, danke. Es ist eine Schande, dass niemand eine Lösung für diese Suche direkt auf dem Geburtsdatum Feld hat ... Ich habe herum mit dem Hinzufügen meiner eigenen FieldType von "BirthdayField", die Indizes wie es ist ein IntField, aber Abfragen, wie es ist ein DateField. .. Lotsa Arbeit. –
Es gibt wahrscheinlich Möglichkeiten, direkt in diesem Feld zu suchen, aber nicht effizient. Aufgrund der Tatsache, dass Sie eine Menge zusätzlicher Logik benötigen und keine vollständigen Antworten in einer einzigen Abfrage erhalten könnten. – Max
Ja, es war die "direkt auf diesem Feld" Frage, die ich wirklich beantwortet haben wollte, stattdessen gab jeder Antworten für die "Follow-up" Frage, die ich gestellt habe. Und ich hatte bereits eine Lösung für das Follow-up (in Anlehnung an das, was Sie vorgeschlagen haben). –