to_tsvector пуст, если в каком-либо столбце нет данных в полнотекстовом поиске PostgreSQL
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Вопросы из категории :
- postgresql Как выбрать n-ую строку в таблице базы данных SQL?
- postgresql Как конкатенировать строки поля строки в запросе PostgreSQL?
- postgresql Возможно ли выполнять кросс-запросы к базе данных с PostgreSQL?
- postgresql Хранение изображений в PostgreSQL
- search grep файл, но показать несколько окружающих строк?
- search Как вы делаете нечувствительный к регистру поиск с использованием модификатора шаблона, используя меньше?
- search Как вы делаете Vim незаметным, что вы искали?
- search Поиск без учета регистра
- null Предложения NOT IN и значения NULL
- null Нулевой против Ложного против 0 в PHP
- null Как проверить пустую / неопределенную / пустую строку в JavaScript?
- null Как вы строите std :: string со встроенным нулем?
- full-text-search Что такое полнотекстовый поиск против LIKE
- full-text-search Инструменты для поиска строк внутри файлов без индексации
- full-text-search Есть ли чистый Python Lucene?
- full-text-search Как я могу управлять релевантностью полнотекстового поиска MySQL, чтобы сделать одно поле более «ценным», чем другое?
- tsvector PostgreSQL: как обойти ограничения по размеру ts_vector?
- tsvector почему этот полнотекстовый поисковый запрос postgresql возвращает значение ts_rank, равное 0?
- tsvector Как конвертировать в цветектор?
- tsvector Как улучшить порядок в поисковом запросе? PostgreSQL