2010-12-27 5 views
14

postresql은 전체 단어 검색을 수행 할 수 있습니까? 예를 들어 "tree"을 검색하려고 시도하지만 postgres에게 "tr"을 검색하도록 알려줍니다.PostgreSQL 전체 텍스트 검색 부분의 단어

이렇게 할 수있는 해결책을 찾을 수 없습니다.

현재 내가

select * from test, to_tsquery('tree') as q where vectors @@ q ; 

을 사용하고 있습니다하지만이 같은 것을 할 싶습니다

select * from test, to_tsquery('tr%') as q where vectors @@ q ; 

답변

10

와일드 카드 일치를 원합니다. 앞서 언급 한 바와 같이

  • 하나의 옵션은, 입니다. 내 (매우) 제한된 경험은 내 좋아하는 (그것이 좋아하는 것보다 느린 경우도 있습니다) 테이블이 너무 느리다는 것입니다. 내가 말했듯이, 트라이 그램에 대한 나의 경험은 제한적이므로 잘못 사용했을 수도 있습니다. 당신이 사용할 수

  • 두 번째 옵션은 wildspeed 모듈입니다 : http://www.sai.msu.su/~megera/wiki/wildspeed (이 상점을 설치 &를 구축해야합니다).

두 번째 옵션은 접미사/중간 일치에도 사용할 수 있습니다. 당신이 찾고있는 것보다 많을 수도 있고 그렇지 않을 수도 있습니다.

색인의 크기와 같은 몇 가지주의 사항이 있으므로 해당 페이지를 자세히 읽으십시오. '*'프리픽스 매칭을 지정하는 벡터 @@ Q OR XXXX LIKE ('% 트리 %')

어디

+4

은 2008 년부터 PostreSQL 코어의 일부가되었습니다.위의 질문에 대한 답변은 – simon

+0

입니까? – Rodrigo

+0

wildspeed는 2008 년부터 업데이트되지 않았으므로 핵심 부분이 아닌 한 이미 [pg_trgrm] (http://www.postgresql.org/docs/current/interactive/pgtrgm.html) 확장명을 사용합니다. – RichVel

2

그것은 괘와 함께 할 수 있지만 tsearch2의 일부가 아니다.

당신은 여기 설명서를 볼 수 있습니다

http://www.postgresql.org/docs/9.0/interactive/pgtrgm.html 기본적으로 무엇을 pg_tgrm 모듈이 그 별도의 부품을 검색 할 수 있도록 부품의 전부에 단어를 분할한다.

18

당신은, 접두사 일치를 tsearch 사용하면 단어의 모든 위치에서 부분 일치를 원하지 않을 경우는,하지만 접두사 검색 작동 http://www.postgresql.org/docs/9.0/interactive/textsearch-controls.html#TEXTSEARCH-PARSING-QUERIES

postgres=# select to_tsvector('tree') @@ to_tsquery('tr:*'); 
?column? 
---------- 
t 
(1 row) 

볼 수 있습니다.

+1

내가 찾는 방향입니다. 그러나 나는 'tr : *'과 동등한 단어에 관심이 있습니다 (귀하의 예에서는). 그 단어들을 다시 얻을 수 있습니까? – Grezly

+0

글쎄, 당신이 작성한 것을 기반으로, SELECT * FROM test WHERE vector @@ to_tsquery ('tr : *')와 같은 것이 좋다. 아니면 tsvector 필드 내의 개별 단어가 일치하는지 알고 싶습니까? 나는 당신이 그것을 할 수 있다고 생각하지 않는다 ... –

+0

필자는 필자의 입력 내용과 일치하는 필드/단어를 정말로 필요로한다. – Grezly

2

는 Q와 같은 시험 to_tsquery ('트리')에서 선택한 *.