如何在 ElasticSearch 中添加分析器设置?
How to add analyzer settings in 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)
但是我有两个问题,
我收到一个编译错误:类型 ImmutableSettings.builder 中的方法 loadFromSource 不适用于参数 XContentBuilder
另外,我不知道如何将我的设置转换成这种格式。了解所有这些方法的文档在哪里?
我试着阅读官方的 ElasticSearch JAVA API https://www.elastic.co/guide/en/elasticsearch/client/java-api/current/search.html 但我找不到任何关于设置分析器的信息。
我找到的所有相关内容都只是REST APIs的形式,而不是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()
我正在使用 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)
但是我有两个问题,
我收到一个编译错误:类型 ImmutableSettings.builder 中的方法 loadFromSource 不适用于参数 XContentBuilder
另外,我不知道如何将我的设置转换成这种格式。了解所有这些方法的文档在哪里? 我试着阅读官方的 ElasticSearch JAVA API https://www.elastic.co/guide/en/elasticsearch/client/java-api/current/search.html 但我找不到任何关于设置分析器的信息。 我找到的所有相关内容都只是REST APIs的形式,而不是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()