@@ -32,7 +32,8 @@ internal sealed record SynonymSetRequest
3232}
3333
3434[ JsonSourceGenerationOptions ( PropertyNamingPolicy = JsonKnownNamingPolicy . SnakeCaseLower ) ]
35- [ JsonSerializable ( typeof ( SynonymSetRequest ) ) ]
35+ [ JsonSerializable ( typeof ( SynonymsSet ) ) ]
36+ [ JsonSerializable ( typeof ( SynonymRule ) ) ]
3637internal sealed partial class SynonymSerializerContext : JsonSerializerContext { } ;
3738
3839public class ElasticsearchMarkdownExporter : IMarkdownExporter , IDisposable
@@ -153,8 +154,22 @@ private async Task PublishSynonymsAsync(string setName, CancellationToken ctx)
153154 {
154155 _logger . LogInformation ( "Publishing synonym set '{SetName}' to Elasticsearch" , setName ) ;
155156
156- var requestBody = new SynonymSetRequest { Synonyms = _synonyms . ToArray ( ) } ;
157- var json = JsonSerializer . Serialize ( requestBody , SynonymSerializerContext . Default . SynonymSetRequest ) ;
157+ var synonymRules = _synonyms . Aggregate ( new List < SynonymRule > ( ) , ( acc , synonym ) =>
158+ {
159+ acc . Add ( new SynonymRule
160+ {
161+ Id = synonym . Split ( "," , StringSplitOptions . RemoveEmptyEntries ) [ 0 ] . Trim ( ) ,
162+ Synonyms = synonym
163+ } ) ;
164+ return acc ;
165+ } ) ;
166+
167+ var synonymsSet = new SynonymsSet
168+ {
169+ Synonyms = synonymRules
170+ } ;
171+
172+ var json = JsonSerializer . Serialize ( synonymsSet , SynonymSerializerContext . Default . SynonymsSet ) ;
158173
159174 var response = await _transport . PutAsync < StringResponse > ( $ "_synonyms/{ setName } ", PostData . String ( json ) , ctx ) ;
160175
@@ -456,3 +471,15 @@ public void Dispose()
456471 GC . SuppressFinalize ( this ) ;
457472 }
458473}
474+
475+ internal sealed record SynonymsSet
476+ {
477+ [ JsonPropertyName ( "synonyms_set" ) ]
478+ public required List < SynonymRule > Synonyms { get ; init ; } = [ ] ;
479+ }
480+
481+ internal sealed record SynonymRule
482+ {
483+ public required string Id { get ; init ; }
484+ public required string Synonyms { get ; init ; }
485+ }
0 commit comments