Я работаю над API django, в котором мне нужно реализовать функцию поиска по мере ввода. Сначала я хотел использовать Django SearchVector и SearchQuery, но они, кажется, плохо работают, когда термины запроса неполные (что не идеально для части, когда вы печатаете), поэтому я выбрал подход SQL. Мне нужно иметь возможность искать по first_name и last_name контакта, а также по электронной почте пользователя, связанного с этим контактом.
Я использовал следующее, чтобы создать search_vector для контакта и добавить индекс в этот столбец. Это прекрасно работает для поиска по имени и фамилии.
ALTER TABLE contact_contact
ADD COLUMN search_vector tsvector;
UPDATE contact_contact
SET search_vector = to_tsvector('english', coalesce(first_name, '') || ' ' || coalesce(last_name, ''));
CREATE INDEX mc_idx2 ON contact_contact USING GIN (search_vector);
Я хотел бы добавить адрес электронной почты пользователя к этому search_vector
, что-то вроде:
...
SET search_vector = to_tsvector('english', coalesce(first_name, '') || ' ' || coalesce(last_name, '') || coalesce(user.email::text, ' '));
...
Я получаю следующую ошибку
ОШИБКА: синтаксическая ошибка в или около . СТРОКА 2: ...|| ' ' || объединиться (фамилия, '') || объединить(user.email::te..
"."
относится к `user.email. Я не могу понять правильный синтаксис или процесс для этого. Любая помощь приветствуется!
search_vector
таблицыcontact_contact
, чтобы поиск можно было выполнять в столбцахfirst_name
иlast_name
, а также вemail
.first_name
иlast_name
— это столбцы из таблицыcontact_contact
, аemail
— это столбцы из таблицыuser
. - person Antoine Quellier   schedule 15.02.2021