모든 쿼리가 사전에 있어야합니까?
아닙니다. 사용 된 텍스트 검색 구성 에 따라 단어 스템 만 색인에 포함되기 때문입니다. 그러나 더 중요한 것은 :
없음 . 그 꼭대기에 있기 때문에 검색은 전체 텍스트 도 할 수있는 접두사 일치 :
이것은 작동합니다 :
SELECT id, subject
FROM mailboxes
WHERE tsv @@ to_tsquery('simple', 'avail:*')
ORDER BY id DESC;
3 가지 주의 사항 :
이 경우 to_tsquery()
, not을 사용하십시오 plainto_tsquery()
( 매뉴얼 인용 ).
... 입력에서 연산자, 가중치 레이블 또는 접두사 일치 레이블을 plainto_tsquery
인식하지 못합니다.tsquery
'avail' 이라는 단어 를 그대로 사용하고 형태소 분석을 적용하지 않기 때문에 'simple'
텍스트 검색 구성을 사용하여 를 생성하십시오 .tsquery
:*
접두사 검색을 만들기 위해 추가 하십시오. 즉 'avail'로 시작하는 모든 룩 셈스를 찾으십시오.
중요 사항 : 이것은 문서의 어휘 (단어)에 대한 접두사 검색입니다. 와일드 카드 ( content ~* 'avail'
)가없는 정규식 일치 는 정확히 동일하지 않습니다! 후자는 고정되어 있지 않으며 (lexemes가 시작될 때까지) 'FOOavail'등을 찾습니다.
쿼리에 동작의 개요를 추가할지 또는 추가 된 정규식에 해당하는지 명확하지 않습니다. @Evan pg_trgm
과 같은 Trigram 인덱스 ( )는 이미 올바른 도구입니다. dba.SE에 관한 많은 관련 질문이 있습니다 . 검색을 시도하십시오 .
개요 :
데모
SELECT *
FROM (
VALUES
('Zend has no framework')
, ('Zend Framework')
) sub(t), to_tsvector(t) AS tsv
WHERE tsv @@ to_tsquery('zend <-> fram:*');
id | t | tsv
----+----------------+------------------------
2 | Zend Framework | 'framework':2 'zend':1
최근 관련 답변 ( 검색 최적화를위한 다른 접근 방식 ) :
이메일?
이메일을 언급 했으므로 텍스트 검색 구문 분석기는 이메일을 식별하고 별도의 단어 / exe로 나누지 않습니다. 치다:
SELECT ts_debug('english', 'xangr@some.domain.com')
(email,"Email address",xangr@some.domain.com,{simple},simple,{xangr@some.domain.com})
포함 된 단어를 색인화 하기 위해 구분 기호 @
와 .
전자 메일의 공백을 공백 ( ' '
)으로 바꿉니다.
또한 영어 (또는 다른 언어) 단어가 아닌 전자 메일의 이름 을 다루 므로 텍스트 검색 구성을 사용하여 형태소 분석 및 기타 언어 기능 을 비활성화 합니다.'simple'
다음을 사용하여 ts_vector
열을 작성하십시오 .
SELECT to_tsvector('simple', translate('joe.xangr@some.domain.com', '@.', ' ')) AS tsv;
:*
문서화되어 있으며 2) 빌드 할 언급to_tsvector('simple'..)
이 tsv의 미래 쿼리에 tsquery에도 '간단한'구성이 필요하다는 지시와 함께 제공해서는 안됩니까? tsvector / tsquery에서 형태소 분석을 비활성화 한 결과를 분명히해야한다고 생각합니다.