В настоящее время я играю с базой данных NOSQL в PostgreSQL. Он содержит 3 таблицы с полями id, data (jsonb) и tsv (tsvector).
У меня возникли некоторые трудности с созданием tsvector из поля данных. С объектами jsonb у меня нет проблем:
Для чего-то вроде этого:
{"genres":{"genre": "Electronic"},
"labels": {"label": {"@name": "Turbo", "@catno": "HEMI-06PU"}},
"styles": {"style": ["House", "Techno", "Tech House"]}}
Я использовал:
UPDATE rel SET tsv = setweight(to_tsvector(coalesce(data->>'genre','')),'B') ||
setweight(to_tsvector(coalesce(data->'labels'->'label'->>'@name','')),'C') ||
setweight(to_tsvector(coalesce(data->'styles'->>'style','')),'D');
Но теперь у меня также есть вложенные структуры, подобные этой:
"tracklist": {"track": [
{"title": "Untitled",
"artists": {"artist": {"id": "676", "anv": null, "join": ",", "name": "Peter Benisch", "role": null, "tracks": null}},
"duration": "5:42",
"position": "1"},
{"title": "Good Morning",
"artists": {"artist": {"id": "166", "anv": null, "join": ",", "name": "Fred Everything", "role": null, "tracks": null}},
"duration": "4:10",
"position": "2"}]
Я пытаюсь получить каждое название всех треков в массиве «треков» в свой tsvector. Количество дорожек может различаться по всей таблице.
я пытался использовать
(jsonb_array_elements(data->'tracklist'->'track'))->>'title'
который дал мне один заголовок в строке.
Может ли кто-нибудь помочь получить эти строки в качестве входных данных для функции to_tsvector()? Или есть другое решение для этого?