我正在使用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)
但是我有2个问题,
我收到编译错误:ImmutableSettings.builder类型的方法loadFromSource不适用于参数XContentBuilder
另外,我不知道如何将我的设置转换为这种格式。在哪里可以找到有关所有这些方法的文档?我尝试阅读官方的ElasticSearch JAVA API https://www.elastic.co/guide/zh-cn/elasticsearch/client/java-api/current/search.html,但找不到任何有关设置分析仪的信息。我发现的所有相关内容仅是REST API的形式,而不是Java API。
XContentBuilder 具有特定的语法,可用于创建json对象。
XContentBuilder
您可以按照https://www.elastic.co/guide/zh-CN/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()