Я сейчас играю с базой данных NOSQL в PostgreSQL. Он содержит 3 таблицы с полями id, data (jsonb) и tsv (tsvector).PostgreSQL 9.4 - Элементы массива jsonb для ts_vector в
У меня возникли трудности с созданием 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"}]
Я пытаюсь получить каждый заголовок всех треков в «дорожке» -array в моем tsvector. Количество дорожек может различаться по всей таблице.
Я попытался с помощью
(jsonb_array_elements(data->'tracklist'->'track'))->>'title'
, который дал мне один титул в строке.
Может ли кто-нибудь помочь с получением этих строк в качестве входных данных для функции to_tsvector()? Или есть другое решение?
возможно, это могло бы помочь: http://stackoverflow.com/questions/31699645/expand-multiple-rows-result-of-jsonb-array-elements-to-tsvector-inside-a-pl-pg – Tomqaz