2017-10-11 12 views
2

PostgreSQL의 to_tsvector 함수는 매우 유용하지만 내 데이터 집합과 관련하여 필자가 원하는 것보다 조금 더 많은 기능을 수행합니다. 예를 들어PostgreSQL의 to_tsvector 함수는 어휘가 아닌 토큰/단어를 반환 할 수 있습니까?

:

select * 
from to_tsvector('english', 'This is my favourite game. I enjoy everything about it.'); 

는 생산 : 'enjoy':7 'everyth':8 'favourit':4 'game':5

내가 그 괜찮, 필터링하기 스톱 단어에 대해 법석을 떨게 아닙니다. 그러나 어떤 단어들은 마치 everythingfavourite처럼 완전히 망가졌습니다.

이 동작을 수정하는 방법이 있습니까? 아니면이 작업을 수행하는 다른 기능이 있습니까?

추신 : 예,이 작업을 수행하는 자체 쿼리를 작성할 수 있지만 더 빠른 방법을 원합니다.

답변

2

표시되는 동작과 원하지 않는 동작은 "형태소 분석"입니다. 원하지 않으면 to_tsvector와 다른 사전을 사용해야합니다. "간단한"사전은 형태소 분석을하지 않으므로 사용 케이스에 맞아야합니다. 다음과 같은 출력 '에 대한'

에서

select * 
from to_tsvector('simple', 'This is my favourite game. I enjoy everything about it.'); 

결과 : 9가 '즐길'7 '모든'8 '좋아하는'4 '게임을'5 '난'6 '이다 ': 2'it ': 10'내 ': 3'this ': 1

여전히 정지 단어를 제거하려면 내가 볼 수있는 한 자신 만의 사전을 정의해야합니다. 아래 예제를 참조하십시오. 정확히 원하는대로 수행하는지 확인하려면 documentation을 읽어보십시오.

CREATE TEXT SEARCH DICTIONARY only_stop_words (
    Template = pg_catalog.simple, 
    Stopwords = english 
); 
CREATE TEXT SEARCH CONFIGURATION public.only_stop_words (COPY = pg_catalog.simple); 
ALTER TEXT SEARCH CONFIGURATION public.only_stop_words ALTER MAPPING FOR asciiword WITH only_stop_words; 
select * 
from to_tsvector('only_stop_words', 'The This is my favourite game. I enjoy everything about it.'); 

'즐길'8 '모든'9 '좋아하는'5 '게임': 내가 볼 6

+0

합니다. 정지 단어를 제거하지만 형태소 분석을하지 않는 사전이 있습니까? – Petar

+0

@ Petar 스톱 워드를 제거하는 또 다른 변형을 추가했습니다 –

+0

완벽합니다. 고맙습니다! – Petar