![](/img/trans.png)
[英]Handling multiple documents from Elastic Search using Java RestClient API
[英]New elasticsearch-java API `CreateIndexRequest` using `.withJson` causes `co.elastic.clients.util.MissingRequiredPropertyException`
我很难使用新的 elasticsearch-java api 客户端。
我正在从 HLRC 迁移到新的 elasticsearch java api。
创建索引时,我使用了 CreateIndexRequest 并使用 json 源加载它
但是为什么会导致异常,似乎缺少必需的属性
json 文件中是否需要所有属性? 但是为什么当我使用 Kibana 时,即使我只是放置了所需的属性,json 文件也可以工作?
同样在已弃用的 HLRC 客户端中,json 在使用其 CreateIndexRequest 时工作。
这也是在springboot环境中
我使用了以下
下面是例外
co.elastic.clients.json.JsonpMappingException: Error deserializing
co.elastic.clients.elasticsearch._types.analysis.TokenizerDefinition:
co.elastic.clients.util.MissingRequiredPropertyException: Missing required property
'PathHierarchyTokenizer.bufferSize' (JSON path:
settings.analysis.tokenizer.unix_path_tokenizer) (line no=15, column no=10, offset=377)
下面是我的代码
final String assetJsonSource = "./config/elasticsearch/my_index_settings.json";
try (InputStream input = new FileInputStream(assetJsonSource)) {
CreateIndexRequest request =
CreateIndexRequest.of(builder -> builder.index(indexName).withJson(input));
CreateIndexResponse response = client2.indices().create(request);
boolean ack = Boolean.TRUE.equals(response.acknowledged());
} catch (IOException e) {
log.error("Failed to create an index", e);
}
我用的json是:
{
"settings": {
"number_of_shards": 5,
"max_ngram_diff": 2,
"analysis": {
"tokenizer": {
"ngram_tokenizer": {
"type": "ngram",
"min_gram": "1",
"max_gram": "3",
"token_chars": ["letter", "digit", "punctuation", "symbol"]
},
"unix_path_tokenizer": {
"type": "path_hierarchy"
},
"whitespace_tokenizer": {
"type": "whitespace"
},
"keyword_tokenizer": {
"type": "keyword"
}
},
"analyzer": {
"ngram_analyzer": {
"tokenizer": "ngram_tokenizer",
"char_filter": ["icu_normalizer"],
"filter": ["lowercase"]
},
"lowercase_analyzer": {
"tokenizer": "keyword",
"filter": ["lowercase"]
},
"directory_path_analyzer": {
"tokenizer": "unix_path_tokenizer"
},
"whitespace_analyzer": {
"tokenizer": "whitespace_tokenizer"
},
"keyword_analyzer": {
"tokenizer": "keyword_tokenizer"
}
},
"normalizer": {
"lowercase_normalizer": {
"filter": ["lowercase"]
}
}
}
},
"mappings": {
"properties": {
"name": {
"type": "text",
"analyzer": "ngram_analyzer",
"fields": {
"lowercase": {
"type": "keyword",
"normalizer": "lowercase_normalizer"
}
}
},
"path": {
"type": "text",
"analyzer": "directory_path_analyzer",
"fields": {
"full": {
"type": "keyword"
}
}
},
"originalSize": {
"type": "double",
"store": "true"
},
"assetCategory": {
"type": "text",
"analyzer": "keyword_analyzer",
"search_analyzer": "whitespace_analyzer",
"fields": {
"keyword": {
"type": "keyword"
}
}
},
"mimetype": {
"type": "keyword"
},
"importedBy": {
"type": "integer",
"store": "true"
},
"updatedBy": {
"type": "keyword"
},
"importedAt": {
"type": "date",
"store": "true"
},
"updatedAt": {
"type": "date",
"store": "true"
},
"fileCreatedAt": {
"type": "date",
"store": "true"
},
"fileUpdatedAt": {
"type": "date",
"store": "true"
},
"metadataSet": {
"type": "long"
},
"instanceId": {
"type": "keyword"
},
"referenceId": {
"type": "keyword"
},
"cutComment": {
"type": "text",
"analyzer": "ngram_analyzer",
"fields": {
"lowercase": {
"type": "text",
"analyzer": "lowercase_analyzer"
}
}
},
"comment": {
"properties": {
"userId": {
"type": "long"
},
"value": {
"type": "text",
"analyzer": "ngram_analyzer",
"fields": {
"lowercase": {
"type": "text",
"analyzer": "lowercase_analyzer"
}
}
},
"updatedAt": {
"type": "date"
}
}
},
"content": {
"type": "text",
"analyzer": "ngram_analyzer"
},
"shadow": {
"type": "boolean",
"store": "true"
},
"shadowUpdatedAt": {
"type": "date",
"store": "true"
},
"downloadValue": {
"type": "long"
},
"collection": {
"type": "long"
},
"sha1": {
"type": "keyword"
},
"subtitle": {
"type": "text",
"analyzer": "ngram_analyzer"
},
"videoOcr": {
"type": "text",
"analyzer": "ngram_analyzer"
},
"version": {
"type": "long"
}
},
"dynamic_templates": [
{
"cmeta_str": {
"match": "cmeta_str-*",
"mapping": {
"type": "text",
"store": "true",
"analyzer": "ngram_analyzer",
"fields": {
"lowercase": {
"type": "keyword",
"normalizer": "lowercase_normalizer"
}
}
}
}
},
{
"cmeta_select": {
"match": "cmeta_select-*",
"mapping": {
"type": "text",
"store": "true",
"analyzer": "ngram_analyzer",
"fields": {
"lowercase": {
"type": "keyword",
"normalizer": "lowercase_normalizer"
}
}
}
}
},
{
"cmeta_bool": {
"match": "cmeta_bool-*",
"mapping": {
"type": "boolean",
"store": "true"
}
}
},
{
"cmeta_double": {
"match": "cmeta_double-*",
"mapping": {
"type": "double",
"store": "true"
}
}
},
{
"cmeta_date": {
"match": "cmeta_date-*",
"mapping": {
"type": "date",
"store": "true"
}
}
},
{
"cmeta_multi_label": {
"match": "cmeta_multi_label-*",
"mapping": {
"type": "long",
"store": "true"
}
}
}
]
}
}
似乎新客户端需要路径层次标记器的显式值,即使它们是默认值。 ( 在此处查看默认值)
您需要将默认值添加到:
"unix_path_tokenizer": {
"type": "path_hierarchy"
}
变成:
"unix_path_tokenizer": {
"type": "path_hierarchy"
"delimiter": "/",
"buffer_size": "1024",
"replacement": "/",
"reverse": "false",
"skip": "0"
}
如果您错过任何默认值,错误将更改为该缺失的属性。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.