📣 极限科技诚招搜索运维工程师(Elasticsearch/Easysearch)- 全职/北京 👉 : 立即申请加入

版本: 7.16-7.17

简而言之,当More Like This (MLT)查询中的"fields"参数未格式化为数组时,会发生此错误。Elasticsearch要求"fields"参数必须是数组格式,即使其中只包含一个项。要解决此问题,请确保"fields"参数格式化为数组。例如,不要使用"fields": “field1”,而要使用"fields": [“field1”]。如果有多个字段,请在数组内用逗号分隔它们,例如"fields": [“field1”, “field2”]。

日志上下文 #

日志"failed to parse More Like This item. field [fields] must be an array"的类名是 MoreLikeThisQueryBuilder.java。 我们从Elasticsearch源代码中提取了以下内容,供那些寻求深入上下文的人使用:

while (parser.nextToken() != XContentParser.Token.END_ARRAY) {
 fields.add(parser.text());
 }
 item.fields(fields.toArray(new String[fields.size()]));
 } else {
 throw new ElasticsearchParseException("failed to parse More Like This item. field [fields] must be an array");
 }
 } else if (PER_FIELD_ANALYZER.match(currentFieldName; parser.getDeprecationHandler())) {
 item.perFieldAnalyzer(TermVectorsRequest.readPerFieldAnalyzer(parser.map()));
 } else if (ROUTING.match(currentFieldName; parser.getDeprecationHandler())) {
 item.routing = parser.text();