2013-06-15 4 views
1

postgresql에서 전체 텍스트 검색을 처음 사용하는데 이상한 문제가 있습니다. 4 난간 다음과 같은 SQL 코드를 빌드 (나는 레일을 생각하지 않는 것은 내 문제의 일부) :postgresql 전체 텍스트 검색에서 쿼리에 파생 단어가있는 경우 아무 것도 찾지 못합니다

SELECT COUNT(*) FROM "bookmarks" 
WHERE (to_tsvector(title || ' ' || description) 
@@ (to_tsquery('english', 'ruby'))) 

그것은 모든 단어와 함께 마법처럼 작동하지만 루비/루비

같은 파생 상품이있는 사람들

designer을 검색하면 designerdesigners과 일치합니다. 벌금.
rubyrubyrubies과 일치 시키겠습니다. 현재는 일치하지 않으며 심지어 ruby도 없습니다. 나는 무엇을 놓쳤는가?

답변

2

의 텍스트 구성으로 english을 지정해야하는 경우 일관된 결과를 얻으려면 to_tsvector에도 지정해야합니다.

to_tsquery('english', 'ruby')

일치하지만 텍스트 검색 구성이 다른 것으로 설정되어있는 경우,이 확장됩니다 'rubi':1로 확장됩니다 english 기본 텍스트 검색 구성은

SELECT COUNT(*) FROM "bookmarks" 
WHERE (to_tsvector('english', title || ' ' || description) 
@@ (to_tsquery('english', 'ruby'))) 

, to_tsvector('ruby')으로 시도 다르고 일치하지 않을 것입니다.

예 :

set default_text_search_config='english'; 
select to_tsvector('ruby') @@ to_tsquery('english','rubies') as result; 
result 
-------- 
t 
(1 row) 

set default_text_search_config='french'; 
select to_tsvector('ruby') @@ to_tsquery('english','rubies') as result; 
result 
-------- 
f 
(1 row) 
+0

은 거기에 뭔가 더있을 수 있습니다 :'B, to_tsvector로 ('루비 디자이너'), A와 '루비 디자이너':: tsvector을 선택 to_tsvector ('영어', '루비 디자이너 ')를 c;'-'english ''없이 pg는 보통 영어 인 기본 사전을 선택합니다. –

+0

동의. 실제 결과와 함께'default_text_search_config'를 포함하는 예제를 추가했습니다. –

+0

다음 두 편의 검색어도 자유롭게 추가 할 수 있습니다 :''루비 디자이너 ':: tsvector를 v1로, to_tsvector ('루비 디자이너 ')를 v2로, to_tsvector ('영어 ','루비 디자이너 ')를 v3 'ruby':: tsquery를 q1로, to_tsquery ('ruby')를 q2로, to_tsquery ('ruby')를 q3) select * from tests; ' –