У меня есть таблица с кучей перевалов Я создал полнотекстовый индекс на столе, как это:Postgresql - полнотекстовый поиск индекс - неожиданный запрос приводит к
CREATE INDEX phrasetable_exp_idx ON msc.mytable
USING gin(to_tsvector('norwegian', coalesce(msc.mytable.col1,'') || ' ' ||
coalesce(msc.mytable.col2,'') || ' ' ||
coalesce(msc.mytable.col3,'') || ' ' ||
coalesce(msc.mytable.col4,'') || ' ' ||
coalesce(msc.mytable.col5,'') || ' ' ||
coalesce(msc.mytable.col6,'') || ' ' ||
coalesce(msc.mytable.col7,'')));
я стараюсь несколько поисков и они молниеносно, однако, для одного конкретного поиска я не получаю ожидаемых результатов. У меня есть строка в моей таблице, где оба col1 и col2 имеют точное значение «Importkompetanse Oslo AS» в col3, оно имеет значение «9999». Только запрос to_tsquery ('9999') возвращает строку, которая показывает мне, что она имеет значение «Importkompetanse Oslo AS» в обоих столбцах col1 и col2, но первые два запроса не возвращают совпадений.
SELECT *
FROM msc.mytable
WHERE to_tsvector('norwegian', coalesce(msc.col1,'') || ' ' ||
coalesce(msc.mytable.col2,'') || ' ' ||
coalesce(msc.mytable.col3,'') || ' ' ||
coalesce(msc.mytable.col4,'') || ' ' ||
coalesce(msc.mytable.col5,'') || ' ' ||
coalesce(msc.mytable.col6,'') || ' ' ||
coalesce(msc.mytable.col7,'')));
@@ --to_tsquery('Importkompetanse&Oslo&AS') -- nada
plainto_tsquery('Importkompetanse') -- nada
--to_tsquery('9999') -- OK!
У кого-нибудь есть идея, почему мои поисковые запросы не дают результатов?
EDIT:
По какой-то причине, to_tsquery возвращает что-то вроде этого: " '9999': 9 'importkompetans': 1,6" Слово importkompetanse кажется отрезать?
Однако, если я устанавливаю его на простой, а не норвежский, я получаю ожидаемые результаты, и все выглядит хорошо. Почему это?
Привет, спасибо за ценный ввод, я новичок в postgres :) Я не уверен, что вы имеете в виду под кросс-конфигурацией? То, что я пытаюсь сделать, - создать индекс, который будет соответствовать фразам, всем словам или некоторым словам и совпадениям в этом порядке, будет ли мой индекс делать это? –
И слово importkompetans не является допустимым словом в норвежском языке, у нас есть составные слова, importkompetanse - действительное слово здесь. Importkomtetans будет таким же, как импорт, на английском, без последней буквы. –
@ LarsAnundskås by * cross * Я имею в виду, что вы должны использовать ту же конфигурацию для вызовов to_tsvector() 'и' to_tsquery() ', как в моем примере (вы опустили параметр конфигурации из своих вызовов' to_tsquery() ' , что означает, что PostgreSQL будет использовать конфигурацию по умолчанию для этого вызова) - 'importkompetans' - это не слово, это лексема (a): (а): оно помогает полнотекстовой поисковой системе распознавать сходства, такие как множественные и отклоненные формы , и т.д. – pozs