to_tsvector пуст, если в каком-либо столбце нет данных в полнотекстовом поиске PostgreSQL

postgresql search null full-text-search tsvector

864 просмотра

2 ответа

Я пытаюсь реализовать полнотекстовый поиск Postgre SQL, но у меня возникает проблема, когда весь документ возвращается пустым, если какой-либо из столбцов, заданных с помощью to_tsvector, пуст.

У меня есть таблица, которая выглядит следующим образом:

id |   title   |   description   |
1  |   skis    |     my skis     |
2  |   bike    |                 | 

Я создаю документ с:

SELECT title, description,
setweight(to_tsvector(title), 'A'::"char") ||
setweight(to_tsvector(description), 'C'::"char")     
AS document
FROM inventory

Результат, который я ожидал увидеть, был:

title |  description  |  document  |
skis  |    my skis    |'ski':1A,3C |
bike  |               | 'bike':1A  | 

но на самом деле я получил:

title |  description  |  document  |
skis  |    my skis    |'ski':1A,3C |
bike  |               |            |

Это похоже на ошибку. Добавление в описание любой отдельной буквы, цифры или чего-либо еще делает документ корректным, но нулевое значение в одном столбце приводит к тому, что весь документ будет пустым. Почему для поиска по заголовку и описанию требуется описание? Я что-то неправильно понимаю?

Автор: knsheely Источник Размещён: 29.10.2019 01:27

Ответы (2)


3 плюса

Решение

Похоже, это стандартное поведение SQL.

В качестве обходного пути вы можете использовать функцию COALESCE в запросе:

SELECT title, description,
setweight(to_tsvector(title), 'A'::"char") ||
setweight(to_tsvector(coalesce(description, '')), 'C'::"char")     
AS document
FROM inventory;
Автор: Artur Размещён: 05.04.2016 03:20

0 плюса

Оказывается, именно значение NULL и является причиной этой проблемы. Мне удалось обойти это, установив для всех столбцов, которые будут включены в индекс поиска, значение NOT NULL и DEFAULT "". Если у кого-нибудь есть объяснение, почему оно функционирует так, как оно работает, я хотел бы знать.

Автор: knsheely Размещён: 04.04.2016 05:24
Вопросы из категории :
32x32