The example below creates the index according to the setting you mentioned.
TokenFilterDefinition tokenFilterDefinition = new TokenFilterDefinition.Builder()
.shingle(ShingleTokenFilter.of(s ->
s.maxShingleSize("3").minShingleSize("2")
))
.build();
TokenFilter tokenFilter = new TokenFilter.Builder()
.definition(tokenFilterDefinition)
.build();
CustomAnalyzer customAnalyzer = new CustomAnalyzer.Builder()
.tokenizer("standard")
.filter("lowercase", "my_filter")
.build();
Analyzer analyzer = new Analyzer.Builder()
.custom(customAnalyzer)
.build();
IndexSettingsAnalysis indexAnalyzers = new IndexSettingsAnalysis.Builder()
.filter("my_filter", tokenFilter)
.analyzer(Map.of("my_analyzer", analyzer))
.build();
client.indices()
.create(createIndexBuilder -> createIndexBuilder
.settings(builder -> builder
.numberOfReplicas("3")
.numberOfShards("3")
.analysis(indexAnalyzers)
).index("test_analyzer"));