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
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions