繁体   English   中英

新的 elasticsearch-java API `CreateIndexRequest` 使用 `.withJson` 导致 `co.elastic.clients.util.MissingRequiredPropertyException`

[英]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环境中

我使用了以下

  • org.elasticsearch:elasticsearch 7.17.4
  • co.elastic.clients:elasticsearch-java 7.17.4
  • jakarta.json:jakarta.json-api 2.0.1
  • com.fasterxml.kackson:杰克逊数据绑定 2.13.3

下面是例外

     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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM