Proyek ini menjembatani kesenjangan antara fleksibilitas kueri OData dan kemampuan pencarian Elasticsearch yang canggih, memungkinkan Anda memanfaatkan sintaksis kueri OData untuk mengkueri indeks Elasticsearch Anda. Baik Anda berurusan dengan objek bertumpuk yang kompleks, array, atau hanya perlu melakukan penelusuran sederhana, ekstensi ini siap membantu Anda.
Untuk mulai menggunakan ekstensi ini, sertakan ekstensi ini dalam proyek Anda dan konfigurasikan agar mengarah ke instans Elasticsearch Anda. Berikut ini contoh singkatnya:
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 ( ) ;
}
}
Ganti Document
dengan kelas dokumen Anda yang dipetakan ke indeks Elasticsearch Anda.
Ekstensi ini mendukung berbagai fungsi kueri OData, yang dirancang khusus untuk DSL kueri Elasticsearch. Inilah yang dapat Anda lakukan:
$filter
): Terjemahkan filter OData ke DSL kueri Elasticsearch, yang mendukung operator logika, operasi perbandingan, dan beberapa fungsi dasar.$orderby
): Dukungan untuk mengurutkan berdasarkan beberapa bidang, termasuk dukungan untuk objek bersarang.$skip
dan $top
): Menerapkan pagination melalui parameter from
dan size
Elasticsearch.$apply
): Dukungan untuk menerjemahkan transformasi agregasi, termasuk fungsi groupby
dan agregat seperti sum
, max
, min
, average
, dan countdistinct
.$select
): Kemampuan untuk menentukan bidang mana yang akan disertakan dalam respons, mengurangi ukuran muatan dan fokus pada data yang relevan.$expand
): Dukungan untuk menerapkan kondisi $filter
dan $select
tambahan pada objek bersarang yang kompleks. Equals
(persamaan)Not Equals
(ne)Greater Than
(gt)Greater Than or Equal
(ge)Less Than
(lt)Less Than or Equal
(le)And
Or
In
startswith
endswith
contains
substringof
any
all
Enum diperlakukan sebagai string, memungkinkan perbandingan langsung tanpa langkah konversi tambahan. Koleksi, termasuk array sederhana dan objek bersarang, dapat dikueri menggunakan fungsi apa saja dan semua, memberikan pengalaman yang lancar untuk bekerja dengan struktur data yang kompleks.
Ekstensi ini menyediakan dukungan untuk kueri bersarang, memungkinkan Anda mempelajari objek dan array bersarang dalam dokumen Anda untuk melakukan pencarian yang lebih detail. Baik Anda memfilter properti objek bertingkat atau membuat kueri array untuk elemen tertentu, ekstensi ini menerjemahkan kueri OData Anda menjadi kueri DSL Elasticsearch yang efisien.
$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 "
}
}
}
]
}
}
]
}
}
}
Kontribusi dipersilahkan! Baik Anda sedang memperbaiki bug, menambahkan fitur baru, atau menyempurnakan dokumentasi, silakan membuat permintaan penarikan.
Proyek ini dilisensikan di bawah Lisensi MIT.
Jika Anda mengalami masalah atau memiliki pertanyaan, silakan ajukan masalah di repositori ini.