Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
a4b976f
Use elasticsearch 8
niemyjski Aug 30, 2024
c6be6c7
WIP - Upgrade to the new Elasticsearch client
niemyjski Aug 30, 2024
aa8e564
Updated elastic
niemyjski Sep 12, 2024
3eec87f
WIP - Added polyfill for what will be added in next client.
niemyjski Sep 12, 2024
5dd521e
Added aggregation container that can be used to map to a descriptor
niemyjski Sep 12, 2024
50c0906
More fixes
niemyjski Sep 12, 2024
3707d56
More work to detect bucket aggs.
niemyjski Sep 12, 2024
1175b50
Commented out code / hacks to get it to compile
niemyjski Sep 12, 2024
020968c
WIP: Fix test compiler errors.
niemyjski Sep 12, 2024
104d5e4
WIP - TESTS
niemyjski Sep 12, 2024
af1f553
WIP - Test updates
niemyjski Sep 13, 2024
001bce4
Upgraded deprecated sync test method.
niemyjski Sep 13, 2024
799f7f3
Small updates
niemyjski Sep 13, 2024
afc472f
More test updates
niemyjski Sep 16, 2024
4b78492
Fixed a query bug
niemyjski Sep 16, 2024
2e1bed2
Merge branch 'main' into feature/elastic-client
niemyjski Oct 28, 2024
cd2e310
Merge branch 'main' into feature/elastic-client
niemyjski Nov 22, 2024
9859e81
Updated to latest client
niemyjski Nov 22, 2024
9526f2b
Merge branch 'main' into feature/elastic-client
niemyjski Nov 26, 2024
d4e8c8f
Merge branch 'main' into feature/elastic-client
niemyjski Jan 24, 2025
b679378
Updated elastic version
niemyjski Jan 24, 2025
a822889
Merge remote-tracking branch 'origin/main' into feature/elastic-client
niemyjski Feb 28, 2025
7d9a25e
WIP: Fixed more compiler errors.
niemyjski Feb 28, 2025
805cfdc
WIP: Down to 71 compiler errors
niemyjski Feb 28, 2025
90bae5f
WIP - Elastic 9.0 Client Preview
niemyjski Apr 14, 2025
62cb72e
WIP - Elastic 9.0 Client Preview
niemyjski Apr 14, 2025
bafe678
More 9 work
niemyjski Apr 14, 2025
1859dee
Merge branch 'main' into feature/elastic-client
niemyjski Nov 30, 2025
c428345
Updates to Elasticsearch client 9.2.2.
niemyjski Nov 30, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
{
"cSpell.words": [
"aggs",
"Foundatio",
"Lucene",
"Niemyjski",
"Xunit",
"aggs"
"Xunit"
],
"msbuildProjectTools.nuget.includePreRelease": true
}
11 changes: 11 additions & 0 deletions src/Foundatio.Parsers.ElasticQueries/AggregationMap.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
using System.Collections.Generic;

namespace Foundatio.Parsers.ElasticQueries;

public record AggregationMap(string Name, object Value)
{
public string Name { get; set; } = Name;
public object Value { get; set; } = Value;
public List<AggregationMap> Aggregations { get; } = new();
public Dictionary<string, object> Meta { get; } = new();
}
241 changes: 139 additions & 102 deletions src/Foundatio.Parsers.ElasticQueries/ElasticMappingResolver.cs

Large diffs are not rendered by default.

18 changes: 10 additions & 8 deletions src/Foundatio.Parsers.ElasticQueries/ElasticQueryParser.cs
Original file line number Diff line number Diff line change
@@ -1,14 +1,16 @@
using System;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Elastic.Clients.Elasticsearch;
using Elastic.Clients.Elasticsearch.Aggregations;
using Elastic.Clients.Elasticsearch.QueryDsl;
using Foundatio.Parsers.ElasticQueries.Extensions;
using Foundatio.Parsers.ElasticQueries.Visitors;
using Foundatio.Parsers.LuceneQueries;
using Foundatio.Parsers.LuceneQueries.Extensions;
using Foundatio.Parsers.LuceneQueries.Nodes;
using Foundatio.Parsers.LuceneQueries.Visitors;
using Nest;
using Pegasus.Common;

namespace Foundatio.Parsers.ElasticQueries;
Expand Down Expand Up @@ -158,7 +160,7 @@ public async Task<QueryValidationResult> ValidateQueryAsync(string query, QueryV
return context.GetValidationResult();
}

public async Task<QueryContainer> BuildQueryAsync(string query, IElasticQueryVisitorContext context = null)
public async Task<Query> BuildQueryAsync(string query, IElasticQueryVisitorContext context = null)
{
context ??= new ElasticQueryVisitorContext();
context.QueryType = QueryTypes.Query;
Expand All @@ -169,7 +171,7 @@ public async Task<QueryContainer> BuildQueryAsync(string query, IElasticQueryVis
return await BuildQueryAsync(result, context).ConfigureAwait(false);
}

public async Task<QueryContainer> BuildQueryAsync(IQueryNode query, IElasticQueryVisitorContext context = null)
public async Task<Query> BuildQueryAsync(IQueryNode query, IElasticQueryVisitorContext context = null)
{
context ??= new ElasticQueryVisitorContext();
var q = await query.GetQueryAsync() ?? new MatchAllQuery();
Expand All @@ -195,7 +197,7 @@ public async Task<QueryValidationResult> ValidateAggregationsAsync(string query,
return context.GetValidationResult();
}

public async Task<AggregationContainer> BuildAggregationsAsync(string aggregations, IElasticQueryVisitorContext context = null)
public async Task<AggregationMap> BuildAggregationsAsync(string aggregations, IElasticQueryVisitorContext context = null)
{
context ??= new ElasticQueryVisitorContext();
context.QueryType = QueryTypes.Aggregation;
Expand All @@ -207,7 +209,7 @@ public async Task<AggregationContainer> BuildAggregationsAsync(string aggregatio
}

#pragma warning disable IDE0060 // Remove unused parameter
public async Task<AggregationContainer> BuildAggregationsAsync(IQueryNode aggregations, IElasticQueryVisitorContext context = null)
public async Task<AggregationMap> BuildAggregationsAsync(IQueryNode aggregations, IElasticQueryVisitorContext context = null)
{
if (aggregations == null)
return null;
Expand All @@ -227,7 +229,7 @@ public async Task<QueryValidationResult> ValidateSortAsync(string query, QueryVa
return context.GetValidationResult();
}

public async Task<IEnumerable<IFieldSort>> BuildSortAsync(string sort, IElasticQueryVisitorContext context = null)
public async Task<ICollection<SortOptions>> BuildSortAsync(string sort, IElasticQueryVisitorContext context = null)
{
context ??= new ElasticQueryVisitorContext();
context.QueryType = QueryTypes.Sort;
Expand All @@ -238,7 +240,7 @@ public async Task<IEnumerable<IFieldSort>> BuildSortAsync(string sort, IElasticQ
return await BuildSortAsync(result, context).ConfigureAwait(false);
}

public Task<IEnumerable<IFieldSort>> BuildSortAsync(IQueryNode sort, IElasticQueryVisitorContext context = null)
public Task<ICollection<SortOptions>> BuildSortAsync(IQueryNode sort, IElasticQueryVisitorContext context = null)
{
context ??= new ElasticQueryVisitorContext();
return GetSortFieldsVisitor.RunAsync(sort, context);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Elastic.Clients.Elasticsearch;
using Elastic.Clients.Elasticsearch.Mapping;
using Foundatio.Parsers.ElasticQueries.Visitors;
using Foundatio.Parsers.LuceneQueries;
using Foundatio.Parsers.LuceneQueries.Visitors;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Abstractions;
using Nest;

namespace Foundatio.Parsers.ElasticQueries;

Expand Down Expand Up @@ -285,35 +286,35 @@ public ElasticQueryParserConfiguration AddAggregationVisitorAfter<T>(IChainableQ

#endregion

public ElasticQueryParserConfiguration UseMappings<T>(Func<TypeMappingDescriptor<T>, TypeMappingDescriptor<T>> mappingBuilder, IElasticClient client, string index) where T : class
public ElasticQueryParserConfiguration UseMappings<T>(Func<TypeMappingDescriptor<T>, TypeMapping> mappingBuilder, ElasticsearchClient client, string index) where T : class
{
MappingResolver = ElasticMappingResolver.Create<T>(mappingBuilder, client, index, logger: _logger);

return this;
}

public ElasticQueryParserConfiguration UseMappings<T>(Func<TypeMappingDescriptor<T>, TypeMappingDescriptor<T>> mappingBuilder, Inferrer inferrer, Func<ITypeMapping> getMapping) where T : class
public ElasticQueryParserConfiguration UseMappings<T>(Func<TypeMappingDescriptor<T>, TypeMapping> mappingBuilder, Inferrer inferrer, Func<TypeMapping> getMapping) where T : class
{
MappingResolver = ElasticMappingResolver.Create<T>(mappingBuilder, inferrer, getMapping, logger: _logger);

return this;
}

public ElasticQueryParserConfiguration UseMappings<T>(IElasticClient client)
public ElasticQueryParserConfiguration UseMappings<T>(ElasticsearchClient client)
{
MappingResolver = ElasticMappingResolver.Create<T>(client, logger: _logger);

return this;
}

public ElasticQueryParserConfiguration UseMappings(IElasticClient client, string index)
public ElasticQueryParserConfiguration UseMappings(ElasticsearchClient client, string index)
{
MappingResolver = ElasticMappingResolver.Create(client, index, logger: _logger);

return this;
}

public ElasticQueryParserConfiguration UseMappings(Func<ITypeMapping> getMapping, Inferrer inferrer = null)
public ElasticQueryParserConfiguration UseMappings(Func<TypeMapping> getMapping, Inferrer inferrer = null)
{
MappingResolver = ElasticMappingResolver.Create(getMapping, inferrer, logger: _logger);

Expand Down
Loading