TIL 2021.05.29 [full text search]

Kyu·2021년 5월 29일
1

TIL

목록 보기
139/322

어제부터 Elasticsearch가 배우고 싶었다.
엘라스틱서치를 찾아보면 항상 루씬이라는 키워드와 같이 나온다.
루씬을 먼저 찾아보기로 했다.
루씬을 찾아보니 full-text search라는 키워드가 나온다.

  1. full-text search는 웹이나 데이터베이스를 검색하는 방식이다.

  2. full-text search는 검색 요청에 대한 문서나 디비안에있는 모든 단어(term)를 인덱싱한다.

  3. 웹 검색 엔진과 문서 편집 소프트웨어는 웹에 저장되어있는 디비 텍스트를 검색할때나 로컬 드라이브에 있는것을 검색할때 full-text search 기술을 활용한다.

  4. full-text search는 웹 검색엔진과 웹페이지에서 사용되는 가장흔한 기술이다. 각 페이지는 검색되고 인덱싱된다.

텍스트 데이터를 검색하는 방법은 크게 두 가지가 있다. 첫 번째는 SQL LIKE 검색으로 모든 텍스트를 스캔하면서 검색 키워드가 존재하는지 검사하는 방법이다. 특성상 검색할 텍스트 데이터가 많아지면 그 크기에 비례해 검색 속도가 느려지는 문제가 있다.

예를 들어서, 아래와 같은 문서가 있다고 치고 Lorem을 검색해본다고 하자.

Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.

SQL LIKE 절을 쓰면 모든 단어들을 스캔한다. 그 말인 즉슨 Lorem을 검색할때 Lorem, Ipsum, is, simply, dummy, text, of, ... 모든 것과 대조해서 Lorem과 일치하는지 찾는다. 그리고 처음이 Lorem이 나왔음에도 거기에서 멈추지않고 끝까지 full scan 한다.

두 번째 방법은 full-text search 기능을 사용하는 것. 일반적으로 인터넷 검색 엔진들이 사용하는 방식으로 텍스트 데이터에서 미리 키워드를 추출해 인덱스를 구성하며 검색시는 이 인덱스를 조회해 빠르게 검색하는 방식이다.

Full-text search는 아직 정확하게는 이해 못했지만, 내가 이해한바로는 아래와 같다.

먼저 위에 있는 예시 텍스트를 가지고 예를 들자면 Lorem, Ipsum, is, simply, dummy, ... 등에 대해서 모두 인덱싱하고, 원하는 단어(term)들을 찾는다. 게다가 사실, 단순히 단어들을 저런식으로 1:1 매칭시켜서 보관하는 것 뿐만아니라 텍스트를 다양한 방식으로 분석해서 인덱싱한다.

예를 들어서 refactor라는 단어가 있으면 refactor라는 단어뿐만아니라 refactoring, refactored 등으로 분석해서 인덱싱할 수도있고 아니면 여러가지 비슷한 단어나 반대되는 단어들을 인덱싱할 수도 있다. 또 한국어로 예를 들자면 한국어는 은,는,이,가 같은 조사들로 단어들이 분리되어 인덱싱 될수도 있고 이처럼 언어에따라서도 다양하게 분석될 수 있다.

LIKE는 한 단어에 대해서 100% 정확한 검색결과를 준다. 생각해보면 그럴것이 검색한 단어에 대해서 처음부터 끝까지 하나하나씩 모두 일치하는지 대조해보기 때문이다. full-text search가 디비와 더불어서 웹에서 사용되어지는 이유는 단어들을 인덱싱하면서 그 단어가 어떤 문서에 있는지 빨리 찾을수 있을것이기 때문이다.

참고
https://tsdn.tabslab.com/ko/mailcarrier/7.4.4/html/2633a32b-2a81-4359-b3c3-fff1c1c022c5.htm
https://www.techopedia.com/definition/17113/full-text-search
https://stackoverflow.com/questions/224714/what-is-full-text-search-vs-like
https://itholic.github.io/database-index/ ⭐️
https://atinjin.github.io/blog/fulltext-search/ (읽어볼것)

profile
TIL 남기는 공간입니다

0개의 댓글