Este proyecto cierra la brecha entre la flexibilidad de las consultas de OData y las poderosas capacidades de búsqueda de Elasticsearch, permitiéndole aprovechar la sintaxis de consultas de OData para consultar sus índices de Elasticsearch. Ya sea que esté tratando con matrices o objetos anidados complejos o simplemente necesite realizar búsquedas simples, esta extensión lo tiene cubierto.
Para comenzar a usar esta extensión, inclúyala en su proyecto y configúrela para que apunte a su instancia de Elasticsearch. Aquí hay un ejemplo 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 ( ) ;
}
}
Reemplace Document
con su clase de documento que se asigna a su índice de Elasticsearch.
Esta extensión admite una amplia gama de funcionalidades de consulta OData, diseñadas específicamente para la consulta DSL de Elasticsearch. Esto es lo que puedes hacer:
$filter
): traduce los filtros de OData a DSL de consulta de Elasticsearch, admitiendo operadores lógicos, operaciones de comparación y algunas funciones básicas.$orderby
): compatibilidad con la clasificación por múltiples campos, incluida la compatibilidad con objetos anidados.$skip
y $top
): implemente la paginación a través de los parámetros from
y size
de Elasticsearch.$apply
): soporte para traducir transformaciones de agregación, incluidas funciones groupby
y agregadas como sum
, max
, min
, average
y countdistinct
.$select
): capacidad de especificar qué campos incluir en la respuesta, reduciendo el tamaño de la carga útil y centrándose en los datos relevantes.$expand
): Soporte para aplicar condiciones $filter
y $select
adicionales en objetos anidados complejos. 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
Las enumeraciones se tratan como cadenas, lo que permite comparaciones sencillas sin pasos de conversión adicionales. Las colecciones, incluidas matrices simples y objetos anidados, se pueden consultar utilizando todas y cada una de las funciones, lo que proporciona una experiencia perfecta para trabajar con estructuras de datos complejas.
La extensión brinda soporte para consultas anidadas, lo que le permite profundizar en objetos y matrices anidados dentro de sus documentos para realizar búsquedas detalladas. Ya sea que esté filtrando propiedades de objetos anidados o consultando matrices para elementos específicos, esta extensión traduce sus consultas OData en consultas DSL de 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 "
}
}
}
]
}
}
]
}
}
}
¡Las contribuciones son bienvenidas! Ya sea que esté corrigiendo un error, agregando una nueva función o mejorando la documentación, no dude en realizar una solicitud de extracción.
Este proyecto está bajo la licencia MIT.
Si encuentra algún problema o tiene preguntas, presente un problema en este repositorio.