문제

테이블로 구성된 속성 관리 응용 프로그램이 있습니다.

tenants
landlords
units
properties
vendors-contacts

기본적으로 검색 필드가 검색하는 범주를 선택하지 않고 검색 필드를 모두 검색하기를 원합니다. 이것이 허용되는 솔루션일까요 (기술 현명한가?)

장기적으로 5 개의 테이블을 검색하는 것이 정상적이며 서버를 멍청하게하지 않습니까? 이것을 달성하는 가장 좋은 방법은 무엇입니까?

PostgreSQL 사용

도움이 되었습니까?

해결책

이를 위해 Lucene과 같은 전문적인 전체 텍스트 인덱싱 도구를 사용하는 것이 좋습니다. 일어나기가 더 쉬울 것입니다. 결과는 더 빠르고 더 특징입니다. Postgres 전체 텍스트 인덱스는이 위에 구조화 된 검색 기능이 필요하거나 검색 인덱스의 트랜잭션이 중요하다면 유용합니다.

데이터베이스에서이를 구현하려면 대리 키를 사용한다고 가정하면 다음 체계와 같은 것이 작동 할 수 있습니다.

  1. 각 검색 가능한 테이블에 대해 해당 테이블의 기본 키 열, 테이블 이름 및 해당 테이블의 모든 검색 가능한 필드를 연결하는 뷰를 만듭니다.
  2. 정확히 동일한 연결의 TO_TSVECTOR ()를 통해 기본에 기능성 진 또는 GIST 인덱스를 만듭니다.
  3. 검색 가능한 뷰를 만들기 위해 모든보기를 통해 노조를 만듭니다.

그런 다음 다음과 같은 검색을 수행 할 수 있습니다.

SELECT id, table_name, ts_rank_cd(body, query) AS rank
    FROM search_view, to_tsquery('search&words') query
    WHERE query @@ body
    ORDER BY rank DESC
    LIMIT 10;

다른 팁

검색하려는 열을 하나로 집계 한 다음 해당 집계 열에서 검색하는 테이블의 통합 인보기를 작성해보십시오.

당신은 다음과 같은 일을 할 수 있습니다 :

select 'tenants:' + ltrim(str(t.Id)), <shared fields> from Tenants as t union
select 'landlords:' + ltrim(str(l.Id)), <shared fields> from Tenants as l union
...

이를 위해서는 클라이언트 쿼리에서 일부 논리가 포함되어야합니다. 검색하기 위해 찾고있는 열쇠를 제작하는 방법을 알아야합니다. 하나의 필드.

즉, "유형"값 (예 : 임대인, 임차인)이 포함 된 별도의 열만 있으면 계산적으로 저렴하고 더 잘 최적화 될 수 있으므로 유형과 ID를 모두 필터하는 것이 더 좋습니다. ).

당신은 사용하고 싶습니다 내장 된 전체 텍스트 검색 또는 별도의 제품 루센. 이것은 이기종 데이터에 대한 구조화되지 않은 검색에 최적화됩니다.

또한 정상 지수는 사용할 수 없다는 것을 잊지 마십시오. something LIKE '%...%'. 전체 텍스트 검색 엔진을 사용하면 효율적인 하위 문자 검색을 수행 할 수 있습니다.

당신은 괜찮아야하고, 이것을 할 수있는 다른 좋은 (쉬운) 방법은 없습니다. 검색중인 필드가 올바르게 색인되어 있는지 확인하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top