검색엔진 역색인 원리

정보검색 · 2019. 12. 23. 22:30

간단한 검색엔진은 개발자라면 누구나 쉽게 만들 수 있다.

물론 루씬(Lucene)이나 엘라스틱서치(Elastic Search), 솔라(Solar)같은 훌륭한 검색엔진들이 이미 즐비하니 굳이 만들 필요는 없다. 이 포스팅은 역색인 원리를 설명하기 위함이다.

 

검색은 당연히 키워드(Keyword)를 넣는다.

 

검색창이 있고 아무 키워드나 넣으면 가장 유사한 문서를 찾아주는 것이 검색엔진이다.

여기서 간단한 검색엔진이라 함은 바로 이 "키워드"를 입력 했을 때 "문서"를 찾아주면 된다는 것이다.

원본 데이터

key : 1
value : 융베리, 아스널 남는다…아르테타 "함께하는 것이 최선의 결정"
key : 2
value : LG화학 "전기차 배터리 독립법인 결정된 바 없다"
key : 3
value : 현대차, 전용 플랫폼 장착한 전기차 SK 배터리 낙점...LG, CATL 2차물량 부터

위와 같이 원본 데이터 3개가 있을 경우

첫번째 데이터를 형태소 분석을 수행하면 다음과 같다.

 

[ ["융베리", NNP] , [ " , ", SP ] , [ "아스널", NNG ] ,  [ "남", VV ],  [ "는다", EC],  [ "...", SE], [ "아르테타", NNP ], [ " \" ", SS], [ "함께", MAG ], [ "하", XSV ], [ "는", ETM ], [ "것", NNB ], [ "이", JKS ], [ "최선", NNG ],  [ "의", JKG ], [ "결정", NNG ], [ " \" ", SS] ] 

 

이 외에도 추가적인 정보가 있지만 설명을 위해 불필요한 정보는 제거하였다.

 

일반적으로 검색엔진은 불필요한 품사를 제외한 명사 등을 추출하여 사용하기 때문에 문장에서 명사만 추출하면 다음과 같다.

융베리, 아스널 남는다…아르테타 "함께하는 것이 최선의 결정"

=> 융베리 아스널 아르테타 최선 결정

 

LG화학 "전기차 배터리 독립법인 결정된 바 없다"

=> lg 화학 전기차 배터리 독립 법인 결정 

 

현대차, 전용 플랫폼 장착한 전기차 SK 배터리 낙점...LG, CATL 2차물량 부터

=> 현대차 전용 플랫폼 장착 전기차 sk 배터리 낙점 lg catl 물량

 

형태소 분석이 끝나면 검색엔진은 역색인 작업을 하게 된다. 결과는 다음과 같다.

 

키워드

문서번호

융베리

 1

아스널

 1

아르테타

 1

최선

 1

결정

1,2

lg

2,3

화학

2

전기차

2,3

배터리

2,3

독립

2

법인

2

현대차

3

전용

3

플랫폼

3

장착

3

낙점

3

catl

3

sk

3

 

역색인의 장점은 매우 빨리 결과를 찾을 수 있다.

키워드가 여러개 있어도 속도에 큰 영향을 주지 않게 된다.

 

 

검색 키워드가 "전기차 결정"라고 입력하면 

전기차에 속한 문서번호 2,3을 가져오고,

결정에 속한 문서번호 1,2을 가져온다.

 

교집합인 2,3을 출력해주면 간단한 작업만 필요하다.

 

OR처리가 필요하면

 

1번 문서 1번

2번 문서 2번

3번 문서 1번

 

문서별 등장 빈도수를 책정한 후, 빈도가 많은 순으로 2,1,3순서를 하면된다.

 

 

 

 

https://needjarvis.tistory.com/345

 

검색엔진의 역색인(Inverted Index)의 원리

만약에 개발자들에게 "간단한 검색엔진(Search Engine)을 만들어보세요"라는 요청을 하면, 대부분은 "제가요?" "못합니다" 등으로 단호히 거절을 할 것이다. 검색엔진이라는 것은 구글이나 네이버, 다음같은 대기..

needjarvis.tistory.com