diff --git a/CHANGELOG.md b/CHANGELOG.md index 16e57e087..75d070e10 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -24,6 +24,7 @@ registration or heartbeat to Clowder that will restrict use of that extractor to ## Fixed - Updated lastModifiesDate when updating file or metadata to a dataset, added lastModified to UI [386](https://github.com/clowder-framework/clowder/issues/386) - Disabled button while create dataset ajax call is still going on [#311](https://github.com/clowder-framework/clowder/issues/311) +- Fixed bug where complex JSON metadata objects using arrays were not being indexed properly for search. ## 1.21.0 - 2022-08-23 diff --git a/app/services/ElasticsearchPlugin.scala b/app/services/ElasticsearchPlugin.scala index 25b7c8d9d..e6e5e6ce9 100644 --- a/app/services/ElasticsearchPlugin.scala +++ b/app/services/ElasticsearchPlugin.scala @@ -527,7 +527,7 @@ class ElasticsearchPlugin(application: Application) extends Plugin { case jv: JsArray => { builder.startArray(clean_k) jv.value.foreach(subv => { - builder.value(subv.toString.replace("\"","")) + builder.value(convertJsObjectToBuilder(builder, subv.asInstanceOf[JsObject])) }) builder.endArray() } @@ -598,11 +598,9 @@ class ElasticsearchPlugin(application: Application) extends Plugin { // Elasticsearch 2 does not allow periods in field names builder.startArray(k.toString.replace(".", "_")) v.value.foreach(jv => { - // Try to interpret numeric value from each String if possible - parseDouble(jv.toString) match { - case Some(d) => builder.value(d) - case None => builder.value(jv) - } + builder.startObject() + convertJsObjectToBuilder(builder, jv.asInstanceOf[JsObject]) + builder.endObject() }) builder.endArray() }