/src/Nest/Ingest/ProcessorsDescriptor.cs

https://github.com/elastic/elasticsearch-net · C# · 181 lines · 75 code · 36 blank · 70 comment · 0 complexity · 41e0c827e50b698551e328518aa3ecc4 MD5 · raw file

  1. // Licensed to Elasticsearch B.V under one or more agreements.
  2. // Elasticsearch B.V licenses this file to you under the Apache 2.0 License.
  3. // See the LICENSE file in the project root for more information
  4. using System;
  5. using System.Collections.Generic;
  6. namespace Nest
  7. {
  8. public class ProcessorsDescriptor : DescriptorPromiseBase<ProcessorsDescriptor, IList<IProcessor>>
  9. {
  10. public ProcessorsDescriptor() : base(new List<IProcessor>()) { }
  11. /// <summary>
  12. /// The ingest attachment plugin lets Elasticsearch extract file attachments in common formats
  13. /// (such as PPT, XLS, and PDF) by using the Apache text extraction library Tika.
  14. /// You can use the ingest attachment plugin as a replacement for the mapper attachment plugin.
  15. /// </summary>
  16. /// <remarks>
  17. /// Requires the Ingest Attachment Processor Plugin to be installed on the cluster.
  18. /// </remarks>
  19. public ProcessorsDescriptor Attachment<T>(Func<AttachmentProcessorDescriptor<T>, IAttachmentProcessor> selector) where T : class =>
  20. Assign(selector, (a, v) => a.AddIfNotNull(v?.Invoke(new AttachmentProcessorDescriptor<T>())));
  21. /// <inheritdoc cref="IAppendProcessor"/>
  22. public ProcessorsDescriptor Append<T>(Func<AppendProcessorDescriptor<T>, IAppendProcessor> selector) where T : class =>
  23. Assign(selector, (a, v) => a.AddIfNotNull(v?.Invoke(new AppendProcessorDescriptor<T>())));
  24. /// <inheritdoc cref="ICsvProcessor"/>
  25. public ProcessorsDescriptor Csv<T>(Func<CsvProcessorDescriptor<T>, ICsvProcessor> selector) where T : class =>
  26. Assign(selector, (a, v) => a.AddIfNotNull(v?.Invoke(new CsvProcessorDescriptor<T>())));
  27. /// <inheritdoc cref="IConvertProcessor"/>
  28. public ProcessorsDescriptor Convert<T>(Func<ConvertProcessorDescriptor<T>, IConvertProcessor> selector) where T : class =>
  29. Assign(selector, (a, v) => a.AddIfNotNull(v?.Invoke(new ConvertProcessorDescriptor<T>())));
  30. /// <inheritdoc cref="IDateProcessor"/>
  31. public ProcessorsDescriptor Date<T>(Func<DateProcessorDescriptor<T>, IDateProcessor> selector) where T : class =>
  32. Assign(selector, (a, v) => a.AddIfNotNull(v?.Invoke(new DateProcessorDescriptor<T>())));
  33. /// <summary>
  34. /// Point documents to the right time-based index based on a date or timestamp field in a document
  35. /// by using the date math index name support.
  36. /// </summary>
  37. public ProcessorsDescriptor DateIndexName<T>(Func<DateIndexNameProcessorDescriptor<T>, IDateIndexNameProcessor> selector) where T : class =>
  38. Assign(selector, (a, v) => a.AddIfNotNull(v?.Invoke(new DateIndexNameProcessorDescriptor<T>())));
  39. /// <summary>
  40. /// Expands a field with dots into an object field.
  41. /// This processor allows fields with dots in the name to be accessible by other processors in the pipeline.
  42. /// Otherwise these fields can’t be accessed by any processor.
  43. /// </summary>
  44. public ProcessorsDescriptor DotExpander<T>(Func<DotExpanderProcessorDescriptor<T>, IDotExpanderProcessor> selector) where T : class =>
  45. Assign(selector, (a, v) => a.AddIfNotNull(v?.Invoke(new DotExpanderProcessorDescriptor<T>())));
  46. /// <inheritdoc cref="IEnrichProcessor"/>
  47. public ProcessorsDescriptor Enrich<T>(Func<EnrichProcessorDescriptor<T>, IEnrichProcessor> selector) where T : class =>
  48. Assign(selector, (a, v) => a.AddIfNotNull(v?.Invoke(new EnrichProcessorDescriptor<T>())));
  49. /// <inheritdoc cref="IFailProcessor"/>
  50. public ProcessorsDescriptor Fail(Func<FailProcessorDescriptor, IFailProcessor> selector) =>
  51. Assign(selector, (a, v) => a.AddIfNotNull(v?.Invoke(new FailProcessorDescriptor())));
  52. public ProcessorsDescriptor Foreach<T>(Func<ForeachProcessorDescriptor<T>, IForeachProcessor> selector) where T : class =>
  53. Assign(selector, (a, v) => a.AddIfNotNull(v?.Invoke(new ForeachProcessorDescriptor<T>())));
  54. /// <summary>
  55. /// Adds information about the geographical location of IP addresses,
  56. /// based on data from the Maxmind databases.
  57. /// This processor adds this information by default under the geoip field.
  58. /// The geoip processor can resolve both IPv4 and IPv6 addresses.
  59. /// </summary>
  60. /// <remarks>
  61. /// Requires the Ingest Geoip Processor Plugin to be installed on the cluster.
  62. /// </remarks>
  63. public ProcessorsDescriptor GeoIp<T>(Func<GeoIpProcessorDescriptor<T>, IGeoIpProcessor> selector) where T : class =>
  64. Assign(selector, (a, v) => a.AddIfNotNull(v?.Invoke(new GeoIpProcessorDescriptor<T>())));
  65. public ProcessorsDescriptor Grok<T>(Func<GrokProcessorDescriptor<T>, IGrokProcessor> selector) where T : class =>
  66. Assign(selector, (a, v) => a.AddIfNotNull(v?.Invoke(new GrokProcessorDescriptor<T>())));
  67. public ProcessorsDescriptor Gsub<T>(Func<GsubProcessorDescriptor<T>, IGsubProcessor> selector) where T : class =>
  68. Assign(selector, (a, v) => a.AddIfNotNull(v?.Invoke(new GsubProcessorDescriptor<T>())));
  69. /// <inheritdoc cref="IJoinProcessor"/>
  70. public ProcessorsDescriptor Join<T>(Func<JoinProcessorDescriptor<T>, IJoinProcessor> selector) where T : class =>
  71. Assign(selector, (a, v) => a.AddIfNotNull(v?.Invoke(new JoinProcessorDescriptor<T>())));
  72. /// <inheritdoc cref="ILowercaseProcessor"/>
  73. public ProcessorsDescriptor Lowercase<T>(Func<LowercaseProcessorDescriptor<T>, ILowercaseProcessor> selector) where T : class =>
  74. Assign(selector, (a, v) => a.AddIfNotNull(v?.Invoke(new LowercaseProcessorDescriptor<T>())));
  75. /// <inheritdoc cref="IRemoveProcessor"/>
  76. public ProcessorsDescriptor Remove<T>(Func<RemoveProcessorDescriptor<T>, IRemoveProcessor> selector) where T : class =>
  77. Assign(selector, (a, v) => a.AddIfNotNull(v?.Invoke(new RemoveProcessorDescriptor<T>())));
  78. /// <inheritdoc cref="IRenameProcessor"/>
  79. public ProcessorsDescriptor Rename<T>(Func<RenameProcessorDescriptor<T>, IRenameProcessor> selector) where T : class =>
  80. Assign(selector, (a, v) => a.AddIfNotNull(v?.Invoke(new RenameProcessorDescriptor<T>())));
  81. /// <summary>
  82. /// Allows inline, stored, and file scripts to be executed within ingest pipelines.
  83. /// </summary>
  84. public ProcessorsDescriptor Script(Func<ScriptProcessorDescriptor, IScriptProcessor> selector) =>
  85. Assign(selector, (a, v) => a.AddIfNotNull(v?.Invoke(new ScriptProcessorDescriptor())));
  86. public ProcessorsDescriptor Set<T>(Func<SetProcessorDescriptor<T>, ISetProcessor> selector) where T : class =>
  87. Assign(selector, (a, v) => a.AddIfNotNull(v?.Invoke(new SetProcessorDescriptor<T>())));
  88. /// <summary>
  89. /// The Sort processor sorts the elements of an array ascending or descending. Homogeneous arrays of numbers
  90. /// will be sorted numerically, while arrays of strings or heterogeneous arrays
  91. /// of strings and numbers will be sorted lexicographically.
  92. /// </summary>
  93. public ProcessorsDescriptor Sort<T>(Func<SortProcessorDescriptor<T>, ISortProcessor> selector) where T : class =>
  94. Assign(selector, (a, v) => a.AddIfNotNull(v?.Invoke(new SortProcessorDescriptor<T>())));
  95. /// <inheritdoc cref="ISplitProcessor"/>
  96. public ProcessorsDescriptor Split<T>(Func<SplitProcessorDescriptor<T>, ISplitProcessor> selector) where T : class =>
  97. Assign(selector, (a, v) => a.AddIfNotNull(v?.Invoke(new SplitProcessorDescriptor<T>())));
  98. /// <inheritdoc cref="ITrimProcessor"/>
  99. public ProcessorsDescriptor Trim<T>(Func<TrimProcessorDescriptor<T>, ITrimProcessor> selector) where T : class =>
  100. Assign(selector, (a, v) => a.AddIfNotNull(v?.Invoke(new TrimProcessorDescriptor<T>())));
  101. /// <inheritdoc cref="IUppercaseProcessor"/>
  102. public ProcessorsDescriptor Uppercase<T>(Func<UppercaseProcessorDescriptor<T>, IUppercaseProcessor> selector) where T : class =>
  103. Assign(selector, (a, v) => a.AddIfNotNull(v?.Invoke(new UppercaseProcessorDescriptor<T>())));
  104. /// <summary>
  105. /// Converts a JSON string into a structured JSON object.
  106. /// </summary>
  107. public ProcessorsDescriptor Json<T>(Func<JsonProcessorDescriptor<T>, IJsonProcessor> selector) where T : class =>
  108. Assign(selector, (a, v) => a.AddIfNotNull(v?.Invoke(new JsonProcessorDescriptor<T>())));
  109. /// <summary>
  110. /// The user_agent processor extracts details from the user agent string a browser sends with its web requests.
  111. /// This processor adds this information by default under the user_agent field.
  112. /// The ingest-user-agent plugin ships by default with the regexes.yaml made available by
  113. /// uap-java with an Apache 2.0 license.
  114. /// </summary>
  115. /// <remarks>
  116. /// Requires the UserAgent Processor Plugin to be installed on the cluster.
  117. /// </remarks>
  118. public ProcessorsDescriptor UserAgent<T>(Func<UserAgentProcessorDescriptor<T>, IUserAgentProcessor> selector) where T : class =>
  119. Assign(selector, (a, v) => a.AddIfNotNull(v?.Invoke(new UserAgentProcessorDescriptor<T>())));
  120. /// <inheritdoc cref="IKeyValueProcessor" />
  121. public ProcessorsDescriptor Kv<T>(Func<KeyValueProcessorDescriptor<T>, IKeyValueProcessor> selector) where T : class =>
  122. Assign(selector, (a, v) => a.AddIfNotNull(v?.Invoke(new KeyValueProcessorDescriptor<T>())));
  123. /// <inheritdoc cref="IUrlDecodeProcessor"/>
  124. public ProcessorsDescriptor UrlDecode<T>(Func<UrlDecodeProcessorDescriptor<T>, IUrlDecodeProcessor> selector) where T : class =>
  125. Assign(selector, (a, v) => a.AddIfNotNull(v?.Invoke(new UrlDecodeProcessorDescriptor<T>())));
  126. /// <inheritdoc cref="IBytesProcessor" />
  127. public ProcessorsDescriptor Bytes<T>(Func<BytesProcessorDescriptor<T>, IBytesProcessor> selector) where T : class =>
  128. Assign(selector, (a, v) => a.AddIfNotNull(v?.Invoke(new BytesProcessorDescriptor<T>())));
  129. /// <inheritdoc cref="IDissectProcessor" />
  130. public ProcessorsDescriptor Dissect<T>(Func<DissectProcessorDescriptor<T>, IDissectProcessor> selector) where T : class =>
  131. Assign(selector, (a, v) => a.AddIfNotNull(v?.Invoke(new DissectProcessorDescriptor<T>())));
  132. /// <inheritdoc cref="IDropProcessor" />
  133. public ProcessorsDescriptor Drop(Func<DropProcessorDescriptor, IDropProcessor> selector) =>
  134. Assign(selector, (a, v) => a.AddIfNotNull(v?.Invoke(new DropProcessorDescriptor())));
  135. /// <inheritdoc cref="ISetSecurityUserProcessor" />
  136. public ProcessorsDescriptor SetSecurityUser<T>(Func<SetSecurityUserProcessorDescriptor<T>, ISetSecurityUserProcessor> selector) where T : class =>
  137. Assign(selector, (a, v) => a.AddIfNotNull(v?.Invoke(new SetSecurityUserProcessorDescriptor<T>())));
  138. /// <inheritdoc cref="IPipelineProcessor" />
  139. public ProcessorsDescriptor Pipeline(Func<PipelineProcessorDescriptor, IPipelineProcessor> selector) =>
  140. Assign(selector, (a, v) => a.AddIfNotNull(v?.Invoke(new PipelineProcessorDescriptor())));
  141. /// <inheritdoc cref="IPipelineProcessor" />
  142. public ProcessorsDescriptor Circle<T>(Func<CircleProcessorDescriptor<T>, ICircleProcessor> selector) where T : class =>
  143. Assign(selector, (a, v) => a.AddIfNotNull(v?.Invoke(new CircleProcessorDescriptor<T>())));
  144. }
  145. }