2016-12-26 5 views
1

부분 일치 또는 약간 벗어나는 쿼리 일치를 지원하는 테이블 내 여러 필드에서 전체 텍스트 검색을 수행 할 수있는 웹 응용 프로그램에서 검색을 구현하려고합니다.postgres에서 전체 텍스트 검색

내 계획은 구체화 된보기를 작성한 다음 퍼지 (삼부작) 검색 색인을 작성하는 것입니다. 그러나 그 방법이 올바른지 확실하지 않습니다.

여기까지 제가 지금까지 있습니다. 나는 SQL이 올바르지 않다고 확신하지만 실제로 그것을 수정하는 방법을 모른다. 나는 아직도 그것에 익숙하지 않다. ORM 외부에서 처음으로 작업했습니다.

나는 postgres 9.5.5를 사용하고 있습니다.

CREATE MATERIALIZED VIEW search AS 
SELECT word FROM ts_stat(
    'SELECT (
     setweight(to_tsvector(''simple'', location.name), ''A'') 
     || setweight(to_tsvector(''simple'',locations.street), ''B'') 
     || setweight(to_tsvector(''simple'',locations.state), ''C'') 
     || setweight(to_tsvector(''simple'',locations.city), ''C'') 
     || setweight(to_tsvector(''simple'',locations.zip,), ''B'') AS document, 
    ) 
    FROM locations 
    GROUP BY locations.id 
    ' 
); 

표 위치
이름
거리
상태
도시
우편
위치 정보

+0

* "퍼지 검색"* 거의 아무것도 할 수 있습니다 :

당신이 시작하는. 정확히 무엇을 달성하려고하는지 설명하십시오. 그리고 테이블 정의, 카디널리티, Postgres 버전을 추가하십시오. –

+0

질문이 업데이트되었습니다. 팁 주셔서 감사! – user3791980

+0

테이블 정의에는 데이터 형식과 제약 조건이 포함됩니다. 예 : http://stackoverflow.com/a/9790225/939860 –

답변

2

은 전혀 이해가하지 않는 것 문제의보기 정의를 실현. ts_stat()은 텍스트 검색 설정을 디버깅하기위한 것입니다.

Full text searchLIKE 또는 정규 표현식 (trigram 색인 사용)과 패턴 일치와 완전히 다릅니다.

"약간 꺼지는"패턴의 여러 열에 대한 퍼지 패턴 일치는 전혀 사소하지 않습니다. 설치 프로그램은 올바른 요구 사항을 고려하여 "올바른"결과를 얻고 "잘못된"결과를 제외하고 성능을 적절하게 유지해야합니다.