Возвращает только родительские элементы + элементы массива, найденные при полнотекстовом поиске в структуре jsonb PostgreSQL 11 - PullRequest
0 голосов
/ 24 сентября 2019

Мы используем PostgreSQL 11 и имеем поле jsonb со следующей структурой:

[
    {
      "name":"some name",
      "items":[
         {
            "text": "item text"
         },
         {
            "text": "something other"
         }
      ]
    }
]

Требуется запустить полнотекстовый поиск по полю и вернуть только родительские элементы + элементы, для которых предусмотрены критерии поиска.нашел.Например, если я ищу «какое-то имя», оно должно вернуть

{
    "name": "some name"
}

. Если я ищу «текст элемента», желаемый результат будет

{
      "name":"some name",
      "items":[
         {
            "text": "item text"
         }
      ]
}

or

{ 
    "text": "item text"
}

.создали индекс для этого столбца:

create index idx_some_index on some_table
using gin ( to_tsvector('english', field_name) );

и могут выполнять запросы вроде:

select * from some_table
where to_tsvector(field_name)
      @@ to_tsquery('some search text');

Но результат поиска возвращает все содержимое столбца.

...