Einleitung
NEST bietet bequem die Möglichkeit, auf Elasticsearch-Daten zuzugreifen.
List & Label kann einfach an NEST Ergebnisobjekte gebunden werden und so auch Daten aus Elasticsearch-Clustern verarbeiten.
Durchführung
Da das Ergebnisobjekt recht komplex aufgebaut ist, sollten Sie in einem explizit erzeugten ObjectDataProvider
einige Eigenschaften setzen. So sieht der Anwender nur das, was auch wirklich benötigt wird. Ein Minimalbeispiel (das Daten von diesem Beispiel verwendet) könnte so aussehen:
using (ListLabel LL = new ListLabel())
{
// Daten von Elasticsearch lesen
var response = ConnectionToES.EsClient().Search<DocumentAttributes>(s => s
.Index("disney")
.From(0)
.Size(1000)
.Query(q => q.MatchAll()));
// Objektdatenprovider mit optimalen Einstellungen erzeugen
ObjectDataProvider provider = new ObjectDataProvider(response.Hits)
{
// Struktur so flach wie möglich halten
MaximumRecursionDepth = 1,
// Klar lesbaren, anwenderfreundlichen Namen für die Tabelle wählen
RootTableName = "Data"
};
// Eventhandler registrieren, um das Parsingverhalten weiter zu beeinflussen
provider.HandleEnumerableProperty += Provider_HandleEnumerableProperty;
// An die Daten binden und Designer aufrufen
LL.DataSource = provider;
LL.Design();
}
Mit dem HandleEnumerableProperty Ereignis des List & Label ObjectDataProvider können Sie alle nicht benötigten Strukturen unterdrücken:
private void Provider_HandleEnumerableProperty(object sender, HandleEnumerablePropertyEventArgs e)
{
// Keine weiteren Pfade akzeptieren
e.CancelRecursion = true;
}
Ergebnis
Die Daten stehen dann im Data > Source Ordner im Designer zur Verfügung:
und können z.B. in einer einfachen Tabelle angezeigt werden:
Natürlich können Sie auch die Ergebnisobjekte in typisierte Objekte umwandeln und sich so die Sonderbehandlung wie oben sparen - das ist im Code dann aber etwas aufwändiger.