如何解决Elasticsearch - 通过 java API 执行但不是手动创建索引失败
我有一个带有 ngram 分析器的复杂索引。我希望能够通过 Java API 创建新索引。我目前为此使用 Kotlin,但使用相同的框架。我已经为此索引创建了架构:
{
"settings": {
"index": {
"max_ngram_diff": 20,"search.idle.after": "10m"
},"analysis": {
"analyzer": {
"ngram3_analyzer": {
"tokenizer": "ngram3_tokenizer","filter": [
"lowercase"
]
}
},"tokenizer": {
"ngram3_tokenizer": {
"type": "ngram","min_gram": 3,"max_gram": 20
}
}
}
},"mappings": {
"dynamic": "strict","_doc": {
"properties": {
"name": {
"type": "keyword","fields": {
"partial": {
"type": "text","analyzer": "ngram3_analyzer","search_analyzer": "keyword"
},"text": {
"type": "text"
}
}
},"location": {
"type": "geo_shape","ignore_malformed": true
},"type": {
"type": "keyword"
},"sort": {
"type": "integer"
}
}
}
}
}
这个 json 模式在通过 rest 客户端 PUT 调用手动传递它时起作用。
{
"ackNowledged": true,"shards_ackNowledged": true,"index": "new_index_created"
}
使用以下 koltin 函数通过弹性 java API 传递相同的模式:
private fun createIndex(index: String,schema: String) {
val createIndexRequest = CreateIndexRequest(index).mapping(schema,XContentType.JSON)
getClient().indices().create(createIndexRequest,RequestOptions.DEFAULT)
}
我收到了这个回复:
Elasticsearch exception [type=mapper_parsing_exception,reason=Failed to parse mapping [_doc]: Root mapping deFinition has unsupported parameters: [settings : {index={max_ngram_diff=20,search.idle.after=10m},analysis={analyzer={ngram3_analyzer={filter=[lowercase],tokenizer=ngram3_tokenizer}},tokenizer={ngram3_tokenizer={min_gram=3,type=ngram,max_gram=20}}}}] [mappings : {_doc={properties={name={type=keyword,fields={text={type=text},partial={search_analyzer=keyword,analyzer=ngram3_analyzer,type=text}}},location={ignore_malformed=true,type=geo_shape},sort={type=integer},type={type=keyword}}},dynamic=strict}]]
对此问题的任何帮助都会很棒:)
解决方法
您得到的错误是因为您将 mappings
和 settings
都传递到 mapping(...)
调用中。
您可以仅使用 mapping()
部分调用 mappings
,使用 setting()
部分调用 settings
,或者您可以像这样调用 source()
:>
val createIndexRequest = CreateIndexRequest(index).source(schema,XContentType.JSON)
^
|
change this
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。