2013-04-22 2 views
0

일치에서 일치하지 않는 tsqueries을 방지 :PostgreSQL는 다음 쿼리를 감안할 때 tsvector

select to_tsvector('fat cat ate rat') @@ plainto_tsquery('cats ate'); 

이 쿼리 결과로 true를 돌려줍니다. 자, "고양이"가 "고양이"라는 단어와 일치하는 것을 원치 않으면, 내가 이것을 막을 수있는 방법이 있습니까?

또한 tsquery가 특정 순서로 전체 문자열과 일치하는지 확인할 수있는 방법이 있습니까 (예 : 'cats ate'가 2 개가 아닌 하나의 토큰으로 계산 됨). 순간 다음 쿼리도 일치합니다 :

select to_tsvector('fat cat ate rat') @@ plainto_tsquery('ate cats'); 

답변

1

catcats 일치하는 것은 영어 형태소 분석, 영어 존재 아마도 기본 텍스트 검색 구성 때문이다. 확실한 결과는 show default_text_search_config입니다.

simple 구성을 사용하면이 문제를 피할 수 있습니다.

select to_tsvector('simple', 'fat cat ate rat') @@ plainto_tsquery('simple', 'cats ate'); 

를 또는 그것을 변경 : 명시 적 텍스트 구성과 함수 호출을 시도

set default_text_search_config='simple'; 
+0

감사합니다. 사실, 대체 사전을 조사하고 있었지만 설명서에서 사용할 수있는 사전이 무엇인지, 해당 속성이 무엇인지에 대해서는 분명하지 않았습니다. 나는이 사전을 분명히 시도 할 것이다. – agnsaft

+0

'fat cat'를 두 개가 아닌 하나의 토큰으로 계산하여 일치의 정밀도를 높이는 방법을 알고 있습니까? – agnsaft

+0

@invictus : 단어를 그룹화하기 위해 파서를 조정할 수있는 방법을 모르겠습니다. 구문 검색을 원한다면 구현되지 않았지만 다소 효과가있을 수 있습니다. [이 관련 질문] (http://stackoverflow.com/questions/1489617)을 참조하십시오. –