Dieses Projekt schließt die Lücke zwischen der Flexibilität von OData-Abfragen und den leistungsstarken Suchfunktionen von Elasticsearch und ermöglicht Ihnen die Nutzung der OData-Abfragesyntax zur Abfrage Ihrer Elasticsearch-Indizes. Egal, ob Sie mit komplexen verschachtelten Objekten oder Arrays arbeiten oder einfach nur einfache Suchvorgänge durchführen müssen, mit dieser Erweiterung sind Sie bestens gerüstet.
Um diese Erweiterung zu verwenden, fügen Sie sie in Ihr Projekt ein und konfigurieren Sie sie so, dass sie auf Ihre Elasticsearch-Instanz verweist. Hier ist ein kurzes Beispiel:
PM> Install-Package Nest.OData
TargetFramework: net8.0
Dependencies:
Microsoft.AspNetCore.OData (>= 8.2.5)
NEST (>= 7.17.5)
[ HttpGet ]
public async Task < IActionResult > Get ( ODataQueryOptions < Document > queryOptions )
{
var searchDescriptor = queryOptions . ToElasticQuery < Document > ( ) ;
var response = await _elasticClient . SearchAsync < Document > ( searchDescriptor ) ;
if ( response . IsValid )
{
return Ok ( response . Documents ) ;
}
else
{
return BadRequest ( ) ;
}
}
Ersetzen Sie Document
durch Ihre Dokumentklasse, die Ihrem Elasticsearch-Index zugeordnet ist.
Diese Erweiterung unterstützt eine breite Palette von OData-Abfragefunktionen, die speziell auf die Abfrage-DSL von Elasticsearch zugeschnitten sind. Folgendes können Sie tun:
$filter
): Übersetzen Sie OData-Filter in Elasticsearch-Abfrage-DSL und unterstützen Sie logische Operatoren, Vergleichsoperationen und einige Grundfunktionen.$orderby
): Unterstützung für die Sortierung nach mehreren Feldern, einschließlich Unterstützung für verschachtelte Objekte.$skip
und $top
): Implementieren Sie die Paginierung über die from
und size
Parameter von Elasticsearch.$apply
): Unterstützung für die Übersetzung von Aggregationstransformationen, einschließlich groupby
und Aggregatfunktionen wie sum
, max
, min
, average
und countdistinct
.$select
): Möglichkeit, anzugeben, welche Felder in die Antwort einbezogen werden sollen, um die Nutzlastgröße zu reduzieren und sich auf die relevanten Daten zu konzentrieren.$expand
): Unterstützung für die Anwendung zusätzlicher $filter
und $select
Bedingungen auf komplexe verschachtelte Objekte. Equals
(eq)Not Equals
(ne)Greater Than
(gt)Greater Than or Equal
(ge)Less Than
(lt)Less Than or Equal
(links)And
Or
In
startswith
endswith
contains
substringof
any
all
Aufzählungen werden als Zeichenfolgen behandelt, was einfache Vergleiche ohne zusätzliche Konvertierungsschritte ermöglicht. Sammlungen, einschließlich einfacher Arrays und verschachtelter Objekte, können mit den Any- und All-Funktionen abgefragt werden, was eine nahtlose Arbeit mit komplexen Datenstrukturen ermöglicht.
Die Erweiterung bietet Unterstützung für verschachtelte Abfragen, sodass Sie in verschachtelte Objekte und Arrays in Ihren Dokumenten eintauchen können, um differenzierte Suchvorgänge durchzuführen. Unabhängig davon, ob Sie nach Eigenschaften verschachtelter Objekte filtern oder Arrays nach bestimmten Elementen abfragen, übersetzt diese Erweiterung Ihre OData-Abfragen in effiziente Elasticsearch DSL-Abfragen.
$filter=Tags/any(t: t/Name eq 'bug')
{
"query" : {
"nested" : {
"path" : " Tags " ,
"query" : {
"term" : {
"Name" : {
"value" : " bug "
}
}
}
}
}
}
$filter=Category in ('Electronics', 'Books')
{
"query" : {
"terms" : {
"Category" : [ " Electronics " , " Books " ]
}
}
}
$filter=Id eq 42 and ((Color eq 'Red') or (Color eq 'Green') or (Color eq 'Blue'))
{
"query" : {
"bool" : {
"must" : [
{
"term" : {
"Id" : {
"value" : 42
}
}
},
{
"bool" : {
"minimum_should_match" : 1 ,
"should" : [
{
"term" : {
"Color" : {
"value" : " Red "
}
}
},
{
"term" : {
"Color" : {
"value" : " Green "
}
}
},
{
"term" : {
"Color" : {
"value" : " Blue "
}
}
}
]
}
}
]
}
}
}
Beiträge sind willkommen! Unabhängig davon, ob Sie einen Fehler beheben, eine neue Funktion hinzufügen oder die Dokumentation verbessern möchten, können Sie jederzeit eine Pull-Anfrage stellen.
Dieses Projekt ist unter der MIT-Lizenz lizenziert.
Wenn Sie auf Probleme stoßen oder Fragen haben, melden Sie bitte ein Problem in diesem Repository.