Skip to content

Indexer changes for flattening complex entities - #179

Open
fettuccinae wants to merge 22 commits into
metabrainz:masterfrom
fettuccinae:complex-entities
Open

fettuccinae wants to merge 22 commits into
metabrainz:masterfrom
fettuccinae:complex-entities

Conversation

@fettuccinae

@fettuccinae fettuccinae commented Aug 12, 2026 •

Copy link
Copy Markdown

Continuation of #178.

There is a bug upstream where *attribute_type.gid and *attribute_type.name are getting skipped completely.
To avoid false positives while comparing with the old output, I have removed these fields from SearchEntities.
We can add them back once the bug upstream is fixed.

…oesnt show up in search results.

In query_result_to_dict, we are currently using a tempvals set to store the value of a field. This works well for fields where duplication is redundant but in the case of same number of mediums.track_count,
duplicate values are removed and the wrong number of tracks is sent for indexing.
We can fix this by using a list to store tempvals,
and after transformfuncs are applied, its de-duplicated(trackmediums is an exception) and added to the dict.

Changed tempvals in query_result_to_dict from set to a list.
Modified test data to test for release with same number of tracks on 2 mediums.
Modified transformfuncs to be compatible with list.
add preserve_og flag to fields, add all retreivable fields to searchFields, add index_partialdate_to_string method
…tructor

Instead of creating parallel arrays for nested fields(here alias list), We can create a JSON string for it. objconverter on that particular nested field will take the  object and returns a list of JSON strings for the nested field.
When comparing with previous configset result, I found that the differences was in tag_count when 0, didnt show up and gender names were capitalized
i.e. Annotation, Cdstub, Editor and Tag. Their fields are flattened already and have no nested objects, so the response writers can easily recreate them.
The nested alias fields becomes alias_json that the response writer unmarshalls
The nested alias fields becomes alias_json that the response writer unmarshalls. Tags are represented as 2 parallel arrays, since each tag name has its own count.
Aliases are serialized into JSON using aliases_to_json tranformfunc. aliases_to_json mirrors what convert.convert_alias_list produces
Aliases are serialized into JSON using aliases_to_json tranformfunc. aliases_to_json mirrors what convert.convert_alias_list produces
Aliases and area_links relationships are now serialized to JSON using the aliases_to_json and area_relations_to_json transformfuncs. area_relations_to_json mirrors what convert.convert_area_relation produced with direction hardcoded to backward.
artist_links and release_links are serialized into a JSON string using url_relations_to_json transformfunc. url_relations_to_json mirrors convert.convert_artist_relation_list and convert.convert_release_relation_list
aliases, artist_links and recording_links relationships are serialized to JSON string using aliases_to_json and work_relations_to_json transformfuncs. work_relations_to_json mirrors convert.convert_artist_relation_list and convert.convert_recording_work_relation_list.
aliases, area_links, artist_links, place_links relationships are serialized to JSON string using aliases_to_json and event_relations_to_json transformfuncs. event_relations_to_json mirrors convert.convert_event_area_relation_list, convert.convert_artist_relation_list and convert.convert_place_relation_list.
artist_credit and release_list are serialized to JSON string using recording_artist_credit_to_json and recording_releases_to_json transformfuncs.
recording_artist_credit_to_json uses a helper function _artist_credit_dict which mirrors convert.convert_artist_credit and convert.convert_name_credit logic to produce an artist_credit_dict.
recording_releases_to_json uses helper functions _artist_credit_dict which mirrors convert.convert_artist_credit, _release_group_for_release_dict which mirrors convert.convert_release_group_for_release,
_medium_from_track_dict which mirrors convert.convert_medium_list_from_track and _release_event_dict which mirrors convert.convert_release_event_list.

Removed tracks.medium.cdtocs.id, tracks.medium.release.country_dates.date_day, tracks.medium.release.country_dates.date_month, tracks.medium.release.country_dates.date_year
because they aren't being used anywhere.
Removed artist_credit.artists.artist.aliases.* because convert_artist_credit is being called with include_aliases=False in convert.convert_release
Removed tracks.medium.release.country_dates.date_* because they aren't being used in convert.convert_release_event_list
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant