이 프로젝트는 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)AndOrInstartswithendswithcontainssubstringofanyall열거형은 문자열로 처리되므로 추가 변환 단계 없이 간단한 비교가 가능합니다. 간단한 배열과 중첩된 개체를 포함한 컬렉션은 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 라이선스에 따라 라이선스가 부여됩니다.
문제가 발생하거나 질문이 있는 경우 이 저장소에 문제를 제출하세요.