如何在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)

但是我有2个问题,

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

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

回答:

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

您可以按照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()

以上是 如何在ElasticSearch中添加分析仪设置? 的全部内容, 来源链接: utcz.com/qa/398593.html

回到顶部