본문 바로가기
Database/MYSQL

Mysql Full-text Index 데이터를 이용한 인덱싱 기법 [n-gram parser ]

by 반화넬 2018. 4. 17.
반응형


DROP TABLE TB_NAME;
CREATE TABLE TB_NAME (
 auto_no int not null auto_increment comment '자동증가값',
 cols1 varchar(200),
 cols2 text
 FULLTEXT INDEX ngram_idx(cols1, cols2) WITH PARSER ngram
)


# Index 추가
ALTER TABLE TB_NAME ADD  FULLTEXT INDEX idx_cols (cols1, cols2)  WITH PARSER ngram;
CREATE FULLTEXT INDEX ngram_idx on TB_NAME (cols1, cols2) WITH PARSER ngram;
REPAIRE TABLE TB_NAME;

# 정확도 검색
SELECT * FROM TB_NAME a WHERE MATCH(a.cols1,a.cols2) AGAINST('중개사');

# 불린 모드 검색 (검색의 정확도에 따라 결과가 정렬되지 않는다)
SELECT * FROM TB_NAME a WHERE MATCH(a.cols1,a.cols2) AGAINST('아파트' IN BOOLEAN MODE);

ngram 파서 공간 처리

 ngram 구문 분석기는 구문 분석 할 때 공백을 제거합니다.  예 :


•  " ab cd " 는 " ab " , " cd "


•  " a bc " 는 " bc " 로 구문 분석됩니다.


  ngram 파서 Stopword 처리

 기본 제공 MySQL 전체 텍스트 구문 분석기는 단어를 중지 단어 목록의 항목과 비교합니다.  단어가 불용어 목록의 항목과 같은 경우 해당 단어는 색인에서 제외됩니다.  ngram 구문 분석기의 경우, 중지 단어 처리가 다르게 수행됩니다.  stopgram 목록의 항목과 동일한 토큰을 제외하는 대신 ngram 구문 분석기 는 중지 단어가 포함 된 토큰을 제외 합니다 .  예를 들어, ngram_token_size=2 라고 가정하면 " a, b " 가 포함 된 문서는 " a " 및 " , b " 로 구문 분석됩니다.  쉼표 ( " , " )가 중지 단어로 정의 된 경우 " a " 와 " b " 는 모두 쉼표가 있기 때문에 색인에서 제외됩니다.

 기본적으로 ngram 구문 분석기는 기본 중지 단어 목록을 포함하는 기본 중지 단어 목록을 사용합니다.  중국어, 일본어 또는 한국어에 적용 할 수있는 정지 단어 목록을 만들려면 자신 만의 정지 단어 목록을 만들어야합니다.  중지 단어 목록 작성에 대한 자세한 내용은 12.9.4 절. "전체 텍스트 중지"를 참조하십시오.

 ngram_token_size보다 긴 길이의 ngram_token_size 는 무시됩니다.

  ngram 파서 용어 검색

 자연 언어 모드 검색의 경우 검색어는 ngram 용어의 조합으로 변환됩니다.  예를 들어, 문자열 " abc " ( ngram_token_size=2 가정)는 " ab bc " 로 변환됩니다.  " ab " 를 포함하고 다른 하나는 " abc "를 포함하는 두 개의 문서가 주어지면 검색 용어 " ab bc " 는 두 문서를 일치시킵니다.

 부울 모드 검색 의 경우 검색어가 ngram 구문 검색으로 변환됩니다.  예를 들어 'abc'문자열 ( ngram_token_size=2 가정)은 ' ab bc ' '로 변환됩니다.  'ab'를 포함하는 문서와 'abc'를 포함하는 문서가있는 경우, 검색 문구 ' ab bc '는 'abc'가 포함 된 문서와 만 일치합니다.

  ngram 파서 와일드 카드 검색

 ngram FULLTEXT 인덱스에는 ngrams 만 들어 있고 용어의 시작에 대한 정보는 없기 때문에 와일드 카드 검색은 예기치 않은 결과를 리턴 할 수 있습니다.  다음과 같은 동작은 ngram FULLTEXT 검색 색인을 사용하는 와일드 카드 검색에 적용됩니다.


•  와일드 카드 검색의 접두어 용어가 ngram 토큰 크기보다 짧은 경우 접두사 용어로 시작하는 ngram 토큰을 포함하는 모든 색인 행을 반환합니다.  예를 들어, ngram_token_size=2 라고 가정하면 " a * "를 검색하면 " a " 로 시작하는 모든 행이 반환됩니다.


•  와일드 카드 검색의 접두사 용어가 ngram 토큰 크기보다 긴 경우 접두사 용어는 ngram 구로 변환되고 와일드 카드 연산자는 무시됩니다.  예를 들어, ngram_token_size=2 라고 가정하면 " abc * " 와일드 카드 검색은 " ab bc " 로 변환됩니다.


  ngram 파서 구 검색

 구문 검색은 ngram 구문 검색으로 변환됩니다.  예를 들어 검색 구문 " abc " 는 " abc " 및 " abbc "가 포함 된 문서를 반환하는 " ab bc "로 변환 됩니다.

 검색 어구 " abc def " 는 " ab bc de ef " 로 변환되며 " abc def " 및 " ab bc de ef "가 포함 된 문서를 반환합니다.  " abcdef " 가 포함 된 문서는 반환되지 않습니다.

반응형