Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / PostgreSQL Новый топик    Ответить
 Наполнение колонки tsvector: ::to_tsvector vs to_tsvector  [new]
rbandrey
Member

Откуда:
Сообщений: 1
Всем привет, столкнулся с тем, что получилось записать в одну колонку данные двумя способами:
1) половина данных была заполнена как "names_vector = to_tsvector(data)"
2) другая половина через "names_vector = data::tsvector"

В итоге имею в одной колонке данные двух "типов":
1) 'г':7 'зе':8 'иегов':5 'местн':1 'организац':3 'религиозн':2 'свидетел':4
и
2) 'в' 'г' 'зея' 'иеговы' 'местная' 'организация' 'религиозная' 'свидетелей'

И тут я начинаю путаться. Тип колонки tsvector. ЭЭ, и я не понимаю, пострегсу не поплохеет, что половина записей не "нормализована" через to_tsvector? Что он сделает с остальной частью? Будет расставлять индекса в рантайме или как?

Извините за тупые вопросы и спасибо.
4 окт 17, 19:40    [20843397]     Ответить | Цитировать Сообщить модератору
 Re: Наполнение колонки tsvector: ::to_tsvector vs to_tsvector  [new]
Rutra
Member

Откуда:
Сообщений: 18
Ему от этого не поплохеет. Но! Строки, заполненные вторым способом вы не будете находить. Т.к. to_tsvector() преобразует слова в базовую форму, а ::tsvector этого не сделает. И вы скорее всего запросы будете выполнять с помощью to_tsquery(), который также преобразует слова в базовую форму. Вам необходимо перезаписать строки, которые были заполнены вторым способом.

У вас не было бы проблем со вторым способом, если бы слова ваших документов уже были бы и базовой форме.

Примеры:
=# select 'г:7 зе:8 иегов:5 местн:1 организац:3 религиозн:2 свидетел:4'::tsvector @@ to_tsquery('религиозная');
 ?column? 
----------
 t
=# select 'в г зея иеговы местная организация религиозная свидетелей'::tsvector @@ to_tsquery('религиозная');
 ?column? 
----------
 f
5 окт 17, 11:54    [20844827]     Ответить | Цитировать Сообщить модератору
Все форумы / PostgreSQL Ответить