MY MEMO

[SQL SERVER] 전체 텍스트 검색 & XML 본문

STUDYING/SQL SERVER

[SQL SERVER] 전체 텍스트 검색 & XML

l_j_yeon 2018. 3. 19. 16:39

1. 전체 텍스트 검색

 : 긴 문장으로 구성된 열의 내용을 검색 할때 인덱스를 사용할 수 없지만 인덱스를 사용할 수 있는 것처럼 만들어서 검색을 빠르게 하는 것

SELECT문의 WHERE or FROM 전에 관련된 키워드를 사용 


SELECT * FROM FulltextTbl WHERE description LIKE '%남자%';

: 이렇게 하면 index 검색이 아닌 table scan


CREATE FULLTEXT CATALOG movieCatalog AS DEFAULT;

: 전체 텍스트 인덱스가 저장될 가상의 공간


CREATE FULLTEXT INDEX ON FullTextTbl(description)

KEY INDEX pk_id

ON movieCatalog

WITH CHANGE_TRACKING AUTO; // 니가 알아서 변경된 건 관리해줘

: 전체 텍스트 검색 table 생성


SELECT * FROM sys.fulltext_indexes;

: 전체 텍스트 인덱스를 보여줘라 


SELECT * FROM sys.dm_fts_index_keywords(DB_ID(), OBJECT_ID('dbo.FulltextTbl'));


DROP FULLTEXT INDEX ON FulltextTbl;


1) 일반 인덱스는 테이블 당 여러개를 생성할 수 있지만 전체 텍스트 인덱스는 테이블 당 하나만 생성

2) 일반 인덱스 INSERT,UPDATE,DELETE 되면 인덱스도 자동으로 엡데이트 -> 전체 텍스트 인덱스에 데이터를 추가하는 채우기는 일정 예약이나 특별한 요청에 의해서 수행되거나 새로운 데이터를 insert 시에 자동으로 수행되도록 한다

3) 전체 텍스트 인덱스는 char, varchar 등의 열에 생성이 가능하다

4) 전체 텍스트 인덱스를 생성할 테이블에는 Primary / Unique Key가 존재해야 한다 


전체 텍스트 인덱스 채우기 : 인덱스를 생성하고 관리하는 것


1) 전체 채우기 : 인덱스를 생성할 때 지정한 열의 모든 데이터 행에 대해서 인덱스를 생성하는 것을 의미

2) 변경 내용 추적 기반 채우기


중지단어 : 각 단어마다 index가 들어가지만 잘 사용하지 않는 것들을 중지하는 것


전체 텍스트 -> 오른쪽 클릭 -> 새 전체 텍스트 중지 목록


전체 중지 텍스트 목록 이름 생성 & 시스템 중지 목록 새로 만들기


새로 만든 중지 목록 -> 속성


중지 단어 쓰고 확인 (여러개 입력하고 싶으면 위의 그림과 현재의 그림 반복)


전체 인덱스 정의 -> 마지막으로 텍스트 정의! -> 계속을 누르고 정지 index를 만든 것을 선택


CONTAINS문


SELECT * FROM newspaper WHERE CONTAINS (article,'영화');

: 기사에 영화라는 단어가 들어간 기사를 찾음

단 '한국영화', 실험영화' 등의 단어가 들어간 열은 검색되지 않음


SELECT * FROM newspaper WHERE CONTAINS (article,'영화 OR 배우');


SELECT * FROM newspaper WHERE CONTAINS (article,'영화*');

: '영화가 앞글자에 들어간 기사


SELECT * FROM newspaper WHERE CONTAINS (article, 'NEAR((영화,배우),2)'); 

: 영화와 배우 사이에 2개의 단어가 들어가도 괜찮음

ex) 영화에 출연한 배우


SELECT * FROM newspaper WHERE CONTAINS (article, 'ISABOUT (영화 weight (1.0), 배우 weight (0.5))'); 

: 영화라는 단어가 가중치를 많이 주고 배우라는 단어에 가중치를 적게 준다


SELECT * FROM newspaper WHERE FREETEXT (article, '영화에 출연한 배우');

: 영화에 출연한 배우와 비슷한 단어들을 포함한 기사의 내용을 검색 


SELECT * FROM CONTAINSTABLE (newspaper, article,'영화');

: 검색한 단어를 포함한 열의 인덱스의 키 값 및 순위를 돌려줌


2. XML 형식

CREATE TABLE xmlTbl (id INT PRIMARY IDENTITY xmlCol XML);

INSERT INTO xmlTbl VALUES(N'<html><body><b> 일반 텍스트 </body></html>';


CREATE INTO tXmltbl VALUES (N'한국어');


형식화된 XML과 XML 스키마

: 형식에 맞는 데이터만 입력


SELECT * FROM userTbl FOR XML RAW. ELEMENTS, XMLSCHEMA;

: userTbl에서 xml schema를 추출


CREATE XML SCHEMA COLLECTION schema_userTbl AS N'스키마 형식';

: XML SCHEMA를 생성


CREATE TABLE tXmlTbl (id INT IDENTITY, xmlCol XML (schema_userTbl));

: 이렇게 테이블을 생성하면 XML에는 지정된 형식은 XML만 들어갈 수 있음


+) xml도 index를 만들 수 있다 -> xml_index

CREATE PRIMARY XML INDEX xmlIdx_indexXmlTbl_xmlInfo ON indexXmlTbl(xmlInfo);




Comments