Thanks for the Jira link. In another case that I know of, Luke requests can output JSON with duplicate keys if you use show=doc and the document contains multiValued fields. Always fun to parse in a language that doesn't support such a structure.
Op za 14 sep 2024 21:16 schreef Gus Heck <gus.h...@gmail.com>: > Unless something changed while I wasn't paying attention, order of fields > in a response is not guaranteed, and some searching in Jira seems to > confirm that ordering of fields in the response is a WONTFIX since 1.3: > https://issues.apache.org/jira/browse/SOLR-1190 > > One would not normally expect ordered keys in JSON anyway... According to > its spec name/value pairs are unordered: https://www.json.org/json-en.html > --> "An *object* is an unordered set of name/value pairs." > > There are a lot of places in our code where we do use LinkedHashMap to hold > the fields, so reading the code might be slightly misleading, but I believe > this is for the iteration cost benefits (scales vs actual entries, rather > vs capacity) more than ordering (some exceptions in our codebase, see rant > below). This use of LinkedHashMap may have led to an undocumented > consistency that you have (unfortunately) come to rely upon. > > <rant tags="old, tired, hard to fix"> > There are some ways in which solr's usage of JSON is a bit dodgy (accepting > illegal commas in some places instead of throwing an error... an > intentional feature of noggit, but not one I like), and in one case that I > know of, duplicate keys are allowed (in > > https://solr.apache.org/guide/solr/latest/indexing-guide/indexing-with-update-handlers.html#sending-json-update-commands > ) > which IS *technically* legal json, but actively discouraged by the RFC: > https://www.rfc-editor.org/rfc/rfc7159#section-4. Since the keys in that > update format denote operations to be performed, order is significant by > implication... something explicitly not guaranteed by the spec. I've always > been annoyed by this design because it relies on behavior that the JSON > spec doesn't ask fully compliant parsers to provide, and it relies on > duplicate keys that many folks will fail to anticipate because it's so rare > and not well supported by libraries. Even in the simpler json.org spec, > there is reference to objects being intended to represent structures in > other languages such as "*object*, record, struct, dictionary, hash table, > keyed list, or associative array", most of which don't allow duplicate > keys, so one could infer some intent even if they failed to exclude the > behavior explicitly. Any mapping of the object into either Java or > Javascript for manipulation requires custom processing, and custom data > structures rather than a simple object mapper... should have been [ { > "operation":"ADD", "parameters": {...}}, ... ] which is ordered and easily > mapped with default mapper configurations widely available everywhere... > </rant> > > > > On Sat, Sep 14, 2024 at 9:11 AM Thomas Corthals <tho...@klascement.net> > wrote: > > > Hi, > > > > Up until Solr 9.6.1, when using the fl parameter the fields were returned > > in what seems to be the same order they are stored in. With Solr 9.7.0, > > they are returned in a different order. > > > > With the techproducts example on Solr 9.6.1: > > > > { > > "responseHeader":{ > > "status":0, > > "QTime":2, > > "params":{ > > "q":"price:[70 TO 80]", > > "fl":"id,price" > > } > > }, > > "response":{ > > "numFound":1, > > "start":0, > > "numFoundExact":true, > > "docs":[{ > > "id":"VS1GB400C3", > > "price":74.99 > > }] > > } > > } > > > > Same query and field list on Solr 9.7.0: > > > > { > > "responseHeader":{ > > "status":0, > > "QTime":44, > > "params":{ > > "q":"price:[70 TO 80]", > > "fl":"id,price" > > } > > }, > > "response":{ > > "numFound":1, > > "start":0, > > "numFoundExact":true, > > "docs":[{ > > "price":74.99, > > "id":"VS1GB400C3" > > }] > > } > > } > > > > Is there a way to keep the returned field order consistent with how it > used > > to be? I'm looking at dozens of failed integration tests because of this > > changed field order. And I can't change the order in the expected outcome > > because the tests have to run against multiple Solr versions. > > > > Thomas > > > > > -- > http://www.needhamsoftware.com (work) > https://a.co/d/b2sZLD9 (my fantasy fiction book) >