Этот проект устраняет разрыв между гибкостью запросов 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, специально разработанных для DSL запросов Elasticsearch. Вот что вы можете сделать:
$filter
). Преобразуйте фильтры OData в DSL запросов Elasticsearch, поддерживая логические операторы, операции сравнения и некоторые базовые функции.$orderby
): поддержка сортировки по нескольким полям, включая поддержку вложенных объектов.$skip
и $top
): реализация разбивки на страницы с помощью параметров from
и size
Elasticsearch.$apply
): поддержка перевода агрегатных преобразований, включая функции groupby
и агрегирования, такие как sum
, max
, min
, average
и countdistinct
.$select
): возможность указать, какие поля включить в ответ, уменьшив размер полезной нагрузки и сосредоточив внимание на соответствующих данных.$expand
): поддержка применения дополнительных условий $filter
и $select
к сложным вложенным объектам. Equals
(экв)Not Equals
(н.э.)Greater Than
(gt)Greater Than or Equal
(ge)Less Than
(лт)Less Than or Equal
(ле)And
Or
In
startswith
endswith
contains
substringof
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.
Если у вас возникнут какие-либо проблемы или возникнут вопросы, сообщите о проблеме в этом репозитории.