![](/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.