Postgresql: как заставить полнотекстовый поиск игнорировать определенные токены? - PullRequest
3 голосов
/ 22 мая 2009

есть ли магическая функция или оператор, игнорирующий некоторые токены?

select to_tsvector('the quick. brown fox') @@ 'brown' -- returns true

select to_tsvector('the quick,brown fox') @@ 'brown' -- returns true

select to_tsvector('the quick.brown fox') @@ 'brown' -- returns false, should return true

select to_tsvector('the quick/brown fox') @@ 'brown' -- returns false, should return true

1 Ответ

4 голосов
/ 22 мая 2009

Боюсь, что вы, вероятно, застряли. Если вы выполните свои термины через ts_debug, вы увидите, что «quick.brown» анализируется как имя хоста, а «quick / brown» - как путь к файловой системе. Парсер действительно не такой умный, к сожалению.

Мое единственное предложение - предварительно обработать текст, чтобы преобразовать эти токены в пробелы. Вы можете легко создать функцию в plpgsql для этого.

nicg=# select ts_debug('the quick.brown fox');
                              ts_debug
---------------------------------------------------------------------
 (asciiword,"Word, all ASCII",the,{english_stem},english_stem,{})
 (blank,"Space symbols"," ",{},,)
 (host,Host,quick.brown,{simple},simple,{quick.brown})
 (blank,"Space symbols"," ",{},,)
 (asciiword,"Word, all ASCII",fox,{english_stem},english_stem,{fox})
(5 rows)

Как видно из вышесказанного, вы не получите жетоны для быстрых и коричневых

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...