이 프로젝트는 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 라이선스에 따라 라이선스가 부여됩니다.
문제가 발생하거나 질문이 있는 경우 이 저장소에 문제를 제출하세요.