Just following up on this after taking a look at my API client again, it
seems that the V2 Schema API does in fact allow JSON boolean values - see
for example
"stored": true
at
https://solr.apache.org/guide/solr/latest/indexing-guide/schema-api.html#add-a-new-field

In this case case, I think that for consistency it would be nice for other
V2 APIs to also support this format. I haven't tested any other APIs other
than the add-searchcomponent command of the Config API.

Alastair

On Tue, 4 Nov 2025 at 11:47, Alastair Porter <[email protected]> wrote:

> Hello,
> I'm using the v2 config API to create a schema and add some new components
> to my collection.
>
> I'm using solr 9.9.0 in cloud mode:
>
> bin/solr start -f -c
> bin/solr create -c test
>
> Based on the documentation at
> https://solr.apache.org/guide/solr/latest/query-guide/suggester.html#adding-the-suggest-search-component
> and the examples at
> https://solr.apache.org/guide/solr/latest/configuration-guide/config-api.html#how-to-map-solrconfig-xml-properties-to-json
>
> I run the following API request to add the suggest component:
>
> curl -X POST -H 'Content-type:application/json' -d '{
>   "add-searchcomponent": {
>     "name": "suggest",
>     "class": "solr.SuggestComponent",
>     "suggester": {
>       "name": "my_suggester",
>       "buildOnStartup": true
>     }
>   }
> }' http://localhost:8983/api/collections/test/config
>
> Note that this request is incorrect: I used a JSON boolean value for the
> "buildOnStartup" parameter instead of a string containing the value "true".
>
> When I run this request, the solr server gets in an invalid state and
> returns this error, in an infinite loop as it tries to reload the collection
>
> 2025-11-04 10:29:20.199 ERROR (SolrConfigHandler-refreshconf) [c: s: r: x:
> t:] o.a.s.h.SolrConfigHandler Unable to refresh conf  =>
> org.apache.solr.common.SolrException: Unable to reload core
> [test_shard1_replica_n1]
> at org.apache.solr.core.CoreContainer.reload(CoreContainer.java:2113)
> org.apache.solr.common.SolrException: Unable to reload core
> [test_shard1_replica_n1]
> at org.apache.solr.core.CoreContainer.reload(CoreContainer.java:2113)
> ~[?:?]
> at
> org.apache.solr.core.SolrCore.lambda$getConfListener$22(SolrCore.java:3458)
> ~[?:?]
> at
> org.apache.solr.handler.SolrConfigHandler$Command.lambda$handleGET$0(SolrConfigHandler.java:253)
> ~[?:?]
> at java.base/java.lang.Thread.run(Thread.java:1583) [?:?]
> Caused by: org.apache.solr.common.SolrException: class java.lang.Boolean
> cannot be cast to class java.lang.String (java.lang.Boolean and
> java.lang.String are in module java.base of loader 'bootstrap')
> at org.apache.solr.core.SolrCore.<init>(SolrCore.java:1229) ~[?:?]
> at org.apache.solr.core.SolrCore.cloneForReloadCore(SolrCore.java:808)
> ~[?:?]
> at org.apache.solr.core.SolrCore.reload(SolrCore.java:777) ~[?:?]
> at org.apache.solr.core.CoreContainer.reload(CoreContainer.java:2073)
> ~[?:?]
> ... 3 more
> Caused by: java.lang.ClassCastException: class java.lang.Boolean cannot be
> cast to class java.lang.String (java.lang.Boolean and java.lang.String are
> in module java.base of loader 'bootstrap')
> at
> org.apache.solr.handler.component.SuggestComponent.inform(SuggestComponent.java:146)
> ~[?:?]
> at
> org.apache.solr.core.SolrResourceLoader.inform(SolrResourceLoader.java:753)
> ~[?:?]
> at org.apache.solr.core.SolrCore.<init>(SolrCore.java:1184) ~[?:?]
> at org.apache.solr.core.SolrCore.cloneForReloadCore(SolrCore.java:808)
> ~[?:?]
> at org.apache.solr.core.SolrCore.reload(SolrCore.java:777) ~[?:?]
> at org.apache.solr.core.CoreContainer.reload(CoreContainer.java:2073)
> ~[?:?]
> ... 3 more
>
> This makes sense given the code which tries to load the string value into
> a boolean:
> https://github.com/apache/solr/blob/19ec326349d1f31d6735f3b8c11b793503c77f43/solr/core/src/java/org/apache/solr/handler/component/SuggestComponent.java#L150
>
> From my perspective, it would be nice to be able to send "real" JSON
> boolean values to this API, however I understand that it may be a major
> change given that even the schema/config XML uses <str name="">true</str>
> for boolean values.
>
> At the very least it would be nice for the config API to return an HTTP
> 400 error if the json type of a parameter is unexpected or isn't one of the
> expected values of "true" or "false". I see that there is already some
> validation of these requests, for example if I send an add-searchcomponent
> request with no "name" field then I get an HTTP 400 response
> "{errorMessages=['name' is a required field]"
>
> As an additional improvement it may be worth also adding a note about
> boolean values at
> https://solr.apache.org/guide/solr/latest/configuration-guide/config-api.html#how-to-map-solrconfig-xml-properties-to-json
> (although I admit that I didn't read this page first and only came to it
> after encountering this issue).
>
> I have a jira account and can open this as an issue if required, or am
> otherwise happy to answer any other questions.
>
> Regards,
> Alastair
>
>

Reply via email to