我正在尝试使用此处解释的自定义设置创建广告索引。我正在使用ElasticSearch 6.3
这是我的代码:
public CreateIndexResponse createIndex(@NotNull String indexName) throws IOException {
CreateIndexRequest request = new CreateIndexRequest();
request.index(indexName);
Settings.Builder settingsBuilder =
Settings.builder()
.put("settings.analysis.filter.autocomplete_filter.type", "edge_ngram")
.put("settings.analysis.filter.autocomplete_filter.min_gram", "1")
.put("settings.analysis.filter.autocomplete_filter.max_gram", "10")
.put("settings.analysis.analyzer.autocomplete.type", "custom")
.put("settings.analysis.analyzer.autocomplete.tokenizer", "standard")
.putList("settings.analysis.analyzer.autocomplete.filter", "lowercase", "autocomplete_filter");
request.settings(settingsBuilder);
return elasticSearchClient.indices().create(request, RequestOptions.DEFAULT);
}
我有这个例外:
Elasticsearch状态异常[Elasticsearch异常[类型=illegal_argument_exception,原因=未知设置[index. settings.analysie.analyzer.auto完成.filter]请检查是否安装了任何必需的插件,或检查中断更改留档删除设置]]
我正在使用AWSElasticSearch实例。我更喜欢使用构建器而不是简单的JSON来创建我的设置请求。我做错了什么吗?
我发现了问题。看来键不能包含settings
前缀。
工作代码是这样的:
public CreateIndexResponse createIndex(@NotNull String indexName) throws IOException {
CreateIndexRequest request = new CreateIndexRequest();
request.index(indexName);
Settings.Builder settingsBuilder =
Settings.builder()
.put("analysis.filter.autocomplete_filter.type", "edge_ngram")
.put("analysis.filter.autocomplete_filter.min_gram", "1")
.put("analysis.filter.autocomplete_filter.max_gram", "10")
.put("analysis.analyzer.autocomplete.type", "custom")
.put("analysis.analyzer.autocomplete.tokenizer", "standard")
.putList("analysis.analyzer.autocomplete.filter", "lowercase", "autocomplete_filter");
request.settings(settingsBuilder);
return elasticSearchClient.indices().create(request, RequestOptions.DEFAULT);
}