如何在ElasticSearch中添加分析器设置?

我正在使用ElasticSearch 1.5.2,我希望有以下设置:

"settings": { "analysis": { "filter": { "filter_shingle": { "type": "shingle", "max_shingle_size": 2, "min_shingle_size": 2, "output_unigrams": false }, "filter_stemmer": { "type": "porter_stem", "language": "English" } }, "tokenizer": { "my_ngram_tokenizer": { "type": "nGram", "min_gram": 1, "max_gram": 1 } }, "analyzer": { "ShingleAnalyzer": { "tokenizer": "my_ngram_tokenizer", "filter": [ "standard", "lowercase", "filter_stemmer", "filter_shingle" ] } } } } 

我应该在哪里添加它们? 我的意思是在创建索引之前或之后?

通过在线搜索我发现了一些方法

 client.admin().indices().prepareCreate("temp_index").setSettings(ImmutableSettings.settingsBuilder().loadFromSource((jsonBuilder() .startObject() .startObject("analysis") .startObject("analyzer")......and so on) 

但我有两个问题,

  1. 我得到一个编译错误:类型ImmutableSettings.builder中的方法loadFromSource不适用于参数XContentBuilder

  2. 此外,我不知道如何将我的设置转换为此格式。 哪些文档可以了解所有这些方法? 我尝试阅读官方ElasticSearch JAVA API https://www.elastic.co/guide/en/elasticsearch/client/java-api/current/search.html但我无法找到有关设置分析器的任何信息。 我发现的所有相关内容仅以REST API的forms存在,而不是在Java API中。

XContentBuilder具有特定的语法,可用于创建json对象。

您可以按照https://www.elastic.co/guide/en/elasticsearch/client/java-api/current/index_.html#helpers将字符串转换为XContentBuilder格式。

如果在应用程序中加载了相同的字符串。 你只是可以做到。

  client.admin().indices() .prepareCreate("index_name").setSettings("{setting _ json _ string }").get() 

简单的工作。

如果你想知道json在XContentBuilder中的样子,那么就在这里,

 XContentBuilder settingsBuilder = XContentFactory.jsonBuilder() .startObject() .startObject("analysis") .startObject("filter") .startObject("filter_shingle") .field("type","shingle") .field("max_shingle_size",2) .field("min_shingle_size",2) .field("output_unigrams",false) .endObject() .startObject("filter_stemmer") .field("type","porter_stem") .field("language","English") .endObject() .endObject() .startObject("tokenizer") .startObject("my_ngram_tokenizer") .field("type","nGram") .field("min_gram",1) .field("max_gram",1) .endObject() .endObject() .startObject("analyzer") .startObject("ShingleAnalyzer") .field("tokenizer","my_ngram_tokenizer") .array("filter","standard","lowercase","filter_stemmer","filter_shingle") .endObject() .endObject() .endObject() .endObject() client.admin().indices() .prepareCreate("index_name").setSettings(settingsBuilder).get()