Skip to content

Index.updateSettings with filterableAttributesConfig fails with Jackson #973

Description

@jebbench

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions