Description
When using the filterableAttributesConfig settings property an exception is thrown.
It looks like Jackson is attempting to serialise the Settings.getFilterableAttributes accessor causing it to throw a "don't use me" exception.
Example Code
val idx = meili.index(INDEX_NAME)
idx.updateSettings(Settings().apply {
filterableAttributesConfig = arrayOf(
FilterableAttributesConfig(arrayOf("parent"), FilterableAttributesFeatures().apply {
filter = FilterableAttributesFilter(true, false)
facetSearch = false
}),
FilterableAttributesConfig(arrayOf("other", "third"), FilterableAttributesFeatures().apply {
filter = FilterableAttributesFilter(true, true)
facetSearch = false
})
)
})
Exception
java.lang.RuntimeException: Meilisearch Exception: {com.fasterxml.jackson.databind.JsonMappingException. Error=com.fasterxml.jackson.databind.JsonMappingException: This index uses granular filterable attributes; please use the granular filterable attributes methods instead of the legacy String[] API. (through reference chain: com.meilisearch.sdk.model.Settings["filterableAttributes"])}
at com.meilisearch.sdk.http.request.BasicRequest.create(BasicRequest.java:22)
at com.meilisearch.sdk.HttpClient.patch(HttpClient.java:135)
at com.meilisearch.sdk.SettingsHandler.updateSettings(SettingsHandler.java:54)
at com.meilisearch.sdk.Index.updateSettings(Index.java:596)
at dev.r36.mercury.rulebot.search.AgentSearchClient.initialise(AgentSearchClient.kt:40)
at dev.r36.mercury.rulebot.search.BulkCreateEmbeddingsKt$main$1.invokeSuspend(BulkCreateEmbeddings.kt:32)
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:34)
at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:100)
at kotlinx.coroutines.EventLoopImplBase.processNextEvent(EventLoop.common.kt:263)
at kotlinx.coroutines.BlockingCoroutine.joinBlocking(Builders.kt:94)
at kotlinx.coroutines.BuildersKt__BuildersKt.runBlocking(Builders.kt:70)
at kotlinx.coroutines.BuildersKt.runBlocking(Unknown Source)
at kotlinx.coroutines.BuildersKt__BuildersKt.runBlocking$default(Builders.kt:48)
at kotlinx.coroutines.BuildersKt.runBlocking$default(Unknown Source)
at dev.r36.mercury.rulebot.search.BulkCreateEmbeddingsKt.main(BulkCreateEmbeddings.kt:25)
at dev.r36.mercury.rulebot.search.BulkCreateEmbeddingsKt.main(BulkCreateEmbeddings.kt)
Caused by: com.meilisearch.sdk.exceptions.JsonEncodingException: com.fasterxml.jackson.databind.JsonMappingException: This index uses granular filterable attributes; please use the granular filterable attributes methods instead of the legacy String[] API. (through reference chain: com.meilisearch.sdk.model.Settings["filterableAttributes"])
at com.meilisearch.sdk.json.JacksonJsonHandler.encode(JacksonJsonHandler.java:48)
at com.meilisearch.sdk.http.request.BasicRequest.create(BasicRequest.java:20)
... 15 more
Caused by: com.fasterxml.jackson.databind.JsonMappingException: This index uses granular filterable attributes; please use the granular filterable attributes methods instead of the legacy String[] API. (through reference chain: com.meilisearch.sdk.model.Settings["filterableAttributes"])
at com.fasterxml.jackson.databind.JsonMappingException.wrapWithPath(JsonMappingException.java:400)
at com.fasterxml.jackson.databind.JsonMappingException.wrapWithPath(JsonMappingException.java:359)
at com.fasterxml.jackson.databind.ser.std.StdSerializer.wrapAndThrow(StdSerializer.java:324)
at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:765)
at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:183)
at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider._serialize(DefaultSerializerProvider.java:503)
at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.serializeValue(DefaultSerializerProvider.java:342)
at com.fasterxml.jackson.databind.ObjectMapper._writeValueAndClose(ObjectMapper.java:4938)
at com.fasterxml.jackson.databind.ObjectMapper.writeValueAsString(ObjectMapper.java:4146)
at com.meilisearch.sdk.json.JacksonJsonHandler.encode(JacksonJsonHandler.java:46)
... 16 more
Caused by: com.meilisearch.sdk.exceptions.GranularFilterableAttributesException: This index uses granular filterable attributes; please use the granular filterable attributes methods instead of the legacy String[] API.
at com.meilisearch.sdk.model.FilterableAttributesLegacyAdapter.toLegacyNamesOrThrow(FilterableAttributesLegacyAdapter.java:51)
at com.meilisearch.sdk.model.Settings.getFilterableAttributes(Settings.java:56)
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
at java.base/java.lang.reflect.Method.invoke(Method.java:565)
at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:688)
at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:760)
... 22 more
Environment (please complete the following information):
- OS: Windows
- Meilisearch version: 1.48.1
- meilisearch-java version: 0.20.1
Description
When using the
filterableAttributesConfigsettings property an exception is thrown.It looks like Jackson is attempting to serialise the
Settings.getFilterableAttributesaccessor causing it to throw a "don't use me" exception.Example Code
Exception
Environment (please complete the following information):