簡體   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