このプロジェクトは、OData クエリの柔軟性と Elasticsearch の強力な検索機能の間のギャップを埋め、OData クエリ構文を利用して Elasticsearch インデックスをクエリできるようにします。複雑なネストされたオブジェクトや配列を扱う場合でも、単純な検索を実行する必要がある場合でも、この拡張機能が役に立ちます。
この拡張機能の使用を開始するには、それをプロジェクトに組み込み、Elasticsearch インスタンスを指すように構成します。簡単な例を次に示します。
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 ( ) ;
}
}
Document
、Elasticsearch インデックスにマップするドキュメント クラスに置き換えます。
この拡張機能は、特に Elasticsearch のクエリ DSL に合わせて調整された、幅広い OData クエリ機能をサポートします。できることは次のとおりです。
$filter
): OData フィルターを Elasticsearch クエリ DSL に変換し、論理演算子、比較演算、およびいくつかの基本関数をサポートします。$orderby
): ネストされたオブジェクトのサポートを含む、複数のフィールドによる並べ替えのサポート。$skip
および$top
): Elasticsearch のfrom
パラメーターとsize
パラメーターを使用してページネーションを実装します。$apply
): sum
、 max
、 min
、 average
、 countdistinct
などのgroupby
および集計関数を含む、集計変換の変換のサポート。$select
): 応答に含めるフィールドを指定して、ペイロード サイズを削減し、関連するデータに焦点を当てる機能。$expand
): 複雑なネストされたオブジェクトに対する追加の$filter
および$select
条件の適用をサポートします。 Equals
(eq)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
列挙型は文字列として扱われるため、追加の変換手順を行わずに直接比較できます。単純な配列やネストされたオブジェクトを含むコレクションは、any 関数と all 関数を使用してクエリできるため、複雑なデータ構造を操作するためのシームレスなエクスペリエンスが提供されます。
この拡張機能はネストされたクエリのサポートを提供し、ドキュメント内のネストされたオブジェクトや配列を詳細に調べて詳細な検索を実行できるようにします。ネストされたオブジェクトのプロパティでフィルタリングする場合でも、特定の要素の配列をクエリする場合でも、この拡張機能は OData クエリを効率的な Elasticsearch DSL クエリに変換します。
$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 "
}
}
}
]
}
}
]
}
}
}
貢献は大歓迎です!バグの修正、新機能の追加、ドキュメントの改善など、お気軽にプルリクエストを行ってください。
このプロジェクトは MIT ライセンスに基づいてライセンスされています。
問題が発生した場合や質問がある場合は、このリポジトリに問題を提出してください。