PostgreSQL String поиск частичных шаблонов, удаляющих лишние символы - PullRequest
3 голосов
/ 24 марта 2010

В поисках простого регулярного выражения SQL (PostgreSQL) или аналогичного решения (возможно, soundex), которое позволит осуществлять гибкий поиск. Так что тире, пробелы и тому подобное при поиске опускаются. В рамках поиска и только необработанные символы ищутся в таблице .:

В настоящее время используется:

SELECT * FROM Productions WHERE part_no ~* '%search_term%'

Если пользователь вводит UTR-1, он не может вызвать UTR1 или UTR 1, хранящиеся в базе данных.

Но совпадения не происходят, когда part_no имеет тире и пользователь пропускает этот символ (или наоборот)

ПРИМЕР поиск части UTR-1 должен найти все совпадения ниже.

UTR1 
UTR --1 
UTR  1

любые предложения ...

Ответы [ 2 ]

2 голосов
/ 24 марта 2010

Вы можете найти официальные, встроенные (не ниже 8.3) возможности полнотекстового поиска в postrgesql, на которые стоит обратить внимание:

http://www.postgresql.org/docs/8.3/static/textsearch.html

Например:

It is possible for the parser to produce overlapping tokens from the 
same of text. 

As an example, a hyphenated word will be reported both as the entire word 
and as each component: 

SELECT alias, description, token FROM ts_debug('foo-bar-beta1');

      alias      |               description                |     token     
-----------------+------------------------------------------+---------------
 numhword        | Hyphenated word, letters and digits      | foo-bar-beta1
 hword_asciipart | Hyphenated word part, all ASCII          | foo
 blank           | Space symbols                            | -
 hword_asciipart | Hyphenated word part, all ASCII          | bar
 blank           | Space symbols                            | -
 hword_numpart   | Hyphenated word part, letters and digits | beta1
2 голосов
/ 24 марта 2010
SELECT  *
FROM    Productions
WHERE   REGEXP_REPLACE(part_no, '[^[:alnum:]]', '') 
      = REGEXP_REPLACE('UTR-1', '[^[:alnum:]]', '')

Создайте индекс для REGEXP_REPLACE(part_no, '[^[:alnum:]]', ''), чтобы он работал быстро.

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