У меня есть таблица со столбцом description
.
В этой таблице я добавил дополнительный столбец с именем tsv
, который заполняется вектором описания.
Я пытаюсь запросить в столбце tsv
определенную фразу, но добавляю отрицательные фразы, чтобы уменьшить количество возвращаемых ложных срабатываний, но я не уверен, как правильно сделать это, поскольку я получаю другое количество результатоввозвращается для каждого способа, который я пытаюсь.
Например, взять stream , как в маленькой реке.
Я получаю
WHERE tsv @@ to_tsquery('english', '
stream
')
RETURNS: 26
Нов некоторых описаниях, как я проверил все 26 вручную, они говорят только о:
... свет, идущий из обоих окон ... (есть 1 с этим в)
или
... поток естественного света ... (Есть 2 с этим в)
Что не имеет ничего общего снебольшой поток проточной воды.
Это в общей сложности 3, поэтому я ожидаю, что вместо этого будет возвращено 23.
Вотчто я пробовал до сих пор, ни один из которых не возвращает 23:
WHERE tsv @@ to_tsquery('english', '
stream
& ! light<->streaming
| ! stream<2>natural<->light
')
>RETURNS: 261
или
WHERE tsv @@ to_tsquery('english', '
stream
& ! light<->streaming
& ! stream<2>natural<->light
')
>RETURNS: 3
или
WHERE tsv @@ to_tsquery('english', '
stream
& ! (
light<->streaming
| stream<2>natural<->light
)
')
>RETURNS: 8
или
WHERE tsv @@ to_tsquery('english', '
stream
& (
! light<->streaming
| ! stream<2>natural<->light
)
')
>RETURNS: 26
Что я делаю не так?Или есть совершенно другой способ, которым мне нужно это делать?
Заранее спасибо
ДОПОЛНЕНИЕ
Просто так я знаю наверняка и длямой здравый смысл, я звонил этот код для каждого термина, который я пытаюсь отрицать
WHERE tsv @@ to_tsquery('english',
'light<->streaming'
)
>RETURNS: 1
WHERE tsv @@ to_tsquery('english',
'stream<2>natural<->light'
)
>RETURNS: 2
Оба вернули записи, которые я хочу удалить из основного запроса.