1. 좋은 글 몇 개를 읽었어요,
SQL Server 2008 전체 텍스트 검색 개요 http://www.cnblogs.com/galaxyyao/archive/2009/02/13/1390139.html
전체 텍스트 색인 http://www.cnblogs.com/liulun/articles/1368655.html
먼저, 한 단락을 복사해 보세요:
Q: 왜 전체 텍스트 검색인가요? A: 텍스트의 쿼리 속도가 느리기 때문입니다(텍스트에 인덱스를 만드는 것이 권장되지 않기 때문입니다) Q: 2005년과 차이가 있나요? A; 물론 차이가 있으며, 이름 앞에는 integrated가 붙어 있습니다. 이전에는 05년에는 별도의 인덱스 파일과 엔진이 있었으나, 08년부터는 파일 그룹에 통합되었습니다. Q: 원칙이 무엇인가요? 답변: 키워드 기준 Q: 일반 지수와 어떻게 관련되나요? A: 목적은 쿼리 속도를 향상시키는 것입니다. 전체 텍스트 색인은 색인과 많은 유사한 특징을 가지고 있습니다 전체 텍스트 검색은 의미 검색(이 기법은 매우 심오해 보입니다)을 사용하며, 이진 문서에도 사용할 수 있습니다. Q: 무엇을 위한 것인가요? A: 가장 간단한 예로 논문 검색, 퍼지 매칭, 빠르고 대량 수량도 순위에 매겨질 수 있습니다.
2. 그럼 MSDN에 가서 동동을 보러 가세요:
전체 텍스트 색인 개요
http://msdn.microsoft.com/zh-cn/library/cc879306.aspx
다음 인용문 중 일부는 다음과 같이 베껴 쓰인다:
1. SQL Server 2008에서는 전체 텍스트 엔진이 데이터베이스 엔진에 완전히 통합되었습니다. 전체 텍스트 엔진은 별도의 프로세스(msftesql.exe) 대신 SQL Server 프로세스(sqlservr.exe)에 있습니다. 전체 텍스트 엔진을 데이터베이스 엔진에 통합함으로써 전체 텍스트 관리성이 향상되고, 하이브리드 쿼리가 최적화되며, 전반적인 성능이 향상됩니다. 보낸 사람: http://msdn.microsoft.com/zh-cn/library/ms142587.aspx
2. 전체 텍스트 검색의 생성 단계, 스크린샷을 찍는 게 귀찮아서 다른 사람이 한 걸 확인하고 직접 인용할 수 있지만, 두 번째 페이지부터는 제 로컬 검색과 다릅니다. 전체 텍스트 검색을 만들기 위해 표를 직접 우클릭할 수 없고, 기본값은 회색이며, 저장소에 있는 전체 텍스트 인덱스 디렉터리 카탈로그에서만 인덱스를 만들 수 있습니다. http://www.sql-server-performance.com/2010/full-text-search-2008/
3. 처음에는 전체 텍스트 검색 디렉터리가 해당 하드디스크의 디렉터리여야 한다고 생각했는데, 이는 로쿤(locune) 개념과 유사합니다. 하지만 실제로는 SQL Server 2008 기준으로 전체 텍스트 디렉터리가 가상 객체로 되어 어떤 파일 그룹에도 속하지 않습니다. 전체 텍스트 목차는 전체 텍스트 색인 집합을 나타내는 논리적 개념입니다. 출처:
http://msdn.microsoft.com/zh-cn/library/ms142497.aspx
4. 테이블이나 인덱스 뷰에는 전체 텍스트 인덱스만 만들 수 있고, 일반 뷰에는 전체 텍스트 인덱스는 만들 수 없습니다.
전체 텍스트 색인은 전체 텍스트 엔진에서 생성 및 유지되는 특별한 유형의 마커 기반 기능 색인입니다. 테이블이나 뷰에서 전체 텍스트 검색을 생성하려면, 해당 테이블이나 뷰는 고유하고 null 불가능한 단일 열 인덱스를 가져야 합니다. 전체 텍스트 엔진은 이 고유 인덱스를 사용하여 테이블의 각 행을 고유한 압축 가능한 키로 매핑해야 합니다. 전체 텍스트 색인에는 Char, Varchar, Nchar, Nvarchar, Text, Ntext, Image, XML, Varbinary, Varbinary(max) 열이 포함될 수 있습니다.
5. 표 A에 전체 텍스트 색인을 생성하려면 전제가 있습니다. 즉, 표 A에 최소 하나의 고유 색인이 있어야 하며, 만약 표 A에 색인이 없다면, 표 A에 전체 텍스트 색인을 만들고 싶지 않다는 뜻입니다.
6.SQL Server 2008에서는 전체 텍스트 인덱스 크기가 SQL Server 인스턴스를 실행하는 컴퓨터의 사용 가능한 메모리 자원에 의해서만 제한됩니다. http://msdn.microsoft.com/zh-cn/library/cc879306.aspx
7. 다중 열에 쿼리 (전체 텍스트 검색) 검색할 열 목록을 지정하면 CONTAINS 술어를 사용하여 여러 열을 쿼리할 수 있습니다. 이 열들은 반드시 같은 표에서 나와야 합니다.
괄호 사용, SELECT Name, Color FROM Production.Product WHERE((Name, Color), 'Red';
또는 * 기호, SELECT 이름, Color FROM Production.Product WHERE(*, 'Red' 포함) 표시를 사용하세요;
출처: http://msdn.microsoft.com/zh-cn/library/ms142488.aspx
9. 여러 테이블에 대해 여러 열을 쿼리합니다
CONTAINS 또는 CONTAINS만 가능하며, 예를 들어 WHERE CONTAINS(t1. 이름, 'Red') 또는 CONTAINS(t2. 이름, '레드');
10. 전체 텍스트 쿼리의 성능 최적화
전체 텍스트 카탈로그를 재구성하려면 ALTER FULLTEXT CATALOG REORGANY를 사용하세요.
전체 텍스트 카탈로그 고객 재구성 변경 및 ACCENT_SENSITIVITY=OFF
더 자세한 정보는 이것을 참고하세요: http://msdn.microsoft.com/zh-cn/library/cc879244.aspx
11. 접두사 탐색 수행 http://msdn.microsoft.com/zh-cn/library/ms142492.aspx
전체 텍스트 검색을 사용해 지정된 접두사가 붙은 단어나 구문을 검색할 수 있습니다.
접두사 검색을 수행하면, 지정된 접두사로 시작하는 텍스트가 포함된 열의 모든 항목이 반환됩니다. 예를 들어, topple, topping, top 자체와 같은 모든 접두사를 포함하는 행을 검색하려면, 쿼리는 다음과 같습니다:
PRODUCT CONTAINS (ProductName, '"auto*"' ) 제품 중에서 선택하세요 ; 별표(*) 앞에 지정된 텍스트와 일치하는 모든 텍스트는 반환됩니다.
참고: 텍스트와 별표 앞뒤에 이중 따옴표를 추가하지 않으면(예: CONTAINS (DEscrip{filter}tION, 'top*') 전체 텍스트 검색에서 별표를 와일드카드로 사용하지 않습니다.
접두사가 구일 때, 구를 구성하는 각 토큰은 별도의 접두사로 취급됩니다. 이 접두사로 시작하는 단어가 포함된 모든 줄은 반환됩니다. 예를 들어, 접두사 "light bread*"는 "light breaded", "lightly breaded", "light bread"라는 문구가 포함된 줄을 찾지만, "Lightly toasted bread"는 반환하지 않습니다.
|