Este projeto preenche a lacuna entre a flexibilidade das consultas OData e os poderosos recursos de pesquisa do Elasticsearch, permitindo que você aproveite a sintaxe de consulta OData para consultar seus índices do Elasticsearch. Esteja você lidando com objetos aninhados complexos, matrizes ou apenas precise realizar pesquisas simples, esta extensão tem o que você precisa.
Para começar a usar esta extensão, inclua-a em seu projeto e configure-a para apontar para sua instância do Elasticsearch. Aqui está um exemplo rápido:
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 ( ) ;
}
}
Substitua Document
pela classe do documento que mapeia para o índice do Elasticsearch.
Esta extensão oferece suporte a uma ampla gama de funcionalidades de consulta OData, adaptadas especificamente para a consulta DSL do Elasticsearch. Aqui está o que você pode fazer:
$filter
): traduz filtros OData em DSL de consulta Elasticsearch, oferecendo suporte a operadores lógicos, operações de comparação e algumas funções básicas.$orderby
): Suporte para classificação por vários campos, incluindo suporte para objetos aninhados.$skip
e $top
): implemente a paginação por meio dos parâmetros from
e size
do Elasticsearch.$apply
): Suporte para tradução de transformações de agregação, incluindo funções groupby
e agregadas como sum
, max
, min
, average
e countdistinct
.$select
): Capacidade de especificar quais campos incluir na resposta, reduzindo o tamanho da carga útil e focando nos dados relevantes.$expand
): Suporte para aplicação de condições adicionais $filter
e $select
em objetos aninhados complexos. Equals
(igual)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
Enums são tratados como strings, permitindo comparações diretas sem etapas de conversão adicionais. Coleções, incluindo matrizes simples e objetos aninhados, podem ser consultadas usando toda e qualquer função, proporcionando uma experiência perfeita para trabalhar com estruturas de dados complexas.
A extensão fornece suporte para consultas aninhadas, permitindo que você se aprofunde em objetos e matrizes aninhados em seus documentos para realizar pesquisas refinadas. Esteja você filtrando propriedades de objetos aninhados ou consultando matrizes para elementos específicos, esta extensão traduz suas consultas OData em consultas DSL Elasticsearch eficientes.
$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 "
}
}
}
]
}
}
]
}
}
}
Contribuições são bem-vindas! Esteja você corrigindo um bug, adicionando um novo recurso ou melhorando a documentação, sinta-se à vontade para fazer uma solicitação pull.
Este projeto está licenciado sob a licença MIT.
Se você encontrar algum problema ou tiver dúvidas, registre um problema neste repositório.