elasticsearch odata net
1.0.0
该项目弥补了 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 索引的文档类。
此扩展支持广泛的 OData 查询功能,专为 Elasticsearch 的查询 DSL 量身定制。您可以执行以下操作:
$filter
):将 OData 过滤器转换为 Elasticsearch 查询 DSL,支持逻辑运算符、比较操作和一些基本功能。$orderby
):支持按多个字段排序,包括支持嵌套对象。$skip
和$top
):通过 Elasticsearch 的from
和size
参数实现分页。$apply
):支持转换聚合转换,包括groupby
和聚合函数,例如sum
、 max
、 min
、 average
和countdistinct
。$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 许可证获得许可。
如果您遇到任何问题或有疑问,请在此存储库上提出问题。