검색엔진이란?

최강일·2022년 5월 5일
0

Elasticsearch

목록 보기
1/4

검색엔진이 필요한 이유(RDB like 검색? 아빠가방에들어가신다?)

  • 관계형 데이터베이스에서의 like 검색은 Full text 탐색을 한다. 1000만건,1억 등 대용량의 테이블에서 "나이키"를 검색한다면 성능에 이슈가 있을것이다.

  • "nike,나이키","핸드폰,휴대폰","신발,운동화" 유사한 키워드들은 동일한 검색 결과가 필요하다.

  • "맛있는 사과" 검색은 "사과" 키워드만 필요하다.

  • 계절,프로모션,키워드 별 가중치에 따른 정렬을 할 수 있다.

    역색인 구조의 자료구조로 빠른 검색이 가능하고, 형태소분석을 통해 필요한 키워드들만 추출하여 검색할 수 있는 응용프로그램인 것이다.

색인 : 책 맨 앞의 목차(특정 컬럼으로 정렬)
역색인 : 책 맨 뒤의 찾아보기(키워드를 통해 문서를 찾아내는 방식)
ex)
1. 나는 홍길동 입니다.
2. 나는 아버지를 아버지라 부르지 못 합니다.
==역색인==
나 1, 2
는 1, 2
홍길동 1
입니다 1
아버지 2
를 2
부르지 2
못 2
합니다 2
홍길동이라는 단어 검색하면 ㄱㄴㄷㄹ라는 순서가있어 금방 홍길동(ㅎ)이라는 단어를 찾고, 1번 문서에 있구나~ 하고 바로 표기

간단한 색인 과정

  1. 문서 수집 : rdb,크롤링,파일 등에서 수집
  2. 문서 분석 및 가공 : 적절한 형태소 분석을 통해 주요 키워드(Term) 추출
  3. 색인(저장) : 역색인 구조로 저장
  4. 검색

형태소 분석

검색엔진은 형태소 분석을 한다.
검색 시에 단어만 입력하는 경우도 없고, '검색 잘하는 방법'라고 검색하면 정확히 '검색 잘하는 방법'라고 나오지 않는다.
검색엔진은 역색인을 보고 검색이라는 단어가 있는 문서 위치를 알려준다.

오픈소스 검색엔진(루씬? Elasticsearch vs Solr)

정확히 lucene은 라이브러리이다. 색인,검색을 지원하는 코어 라이브러리인 것이다.
루씬 lib을 사용한다는것은 색인,검색에 필요한 코어 클래스들을 활용하여 필요한 기능들을 직접 구현하고 전체적인 검색엔진을 직접 만드는 형태이다.

그리고 루씬 기반으로 만들어진것이 오픈소스 검색엔진으로 많이 알려진 Elaistcsearch, Solr가 있다. 두가지 각자 장단점을 잘 고려하여 선택하면 될 것 같다.

Elasitcsearch의 장단점

비교적 신생 검색엔진으로, Solr의 단점을 상당 수 보완

  • 쉬운 설정
  • 샤딩
  • 친절한 공식문서
  • 빠른 검색 속도
  • elasticsearch 외에 다양한 플랫폼 제공(filebeat,logstash,kibana)
  • 강력하고 다양한 API 제공
  • 자동 rebalancing
  • 방대한 커뮤니티
  • 계층적 데이터 검색에 유리

Solr 장단점

elasticsearch에 비해 어 정도 안정화 되어 있는 검색엔진(대용량 검색 서비스에 적합)

  • 비교적 안정적인 검색엔진
  • ADMIN 웹 제공
  • 비교적 느린 검색속도
  • 계층 데이터 검색 제공 X
  • 복잡한 설정(xml)
  • 공식문서가 많이 미흡하다
  • 공식문서 외에 정보가 부족
profile
Search & Backend Engineer

0개의 댓글