검색시스템(Search System)
검색시스템은 대용량 데이터를 기반으로 신뢰성 있는 검색결과를 제공하기 위해 검색엔진을 기반으로 구축된 시스템
여기서 용어를 정리해봐야 하는데요?
아래 3가지 정도는 머리속에 정리해 두셔야 합니다.
하나, 검색엔진(Search Engine)
- 검색엔진은 광활한 웹에서 정보를 수집해 검색결과를 제공하는 프로그램
둘, 검색시스템(Search System)
- 검색시스템은 대용량 데이터를 기반으로 신뢰성 있는 검색결과를 제공하기 위해 검색엔진을 기반으로 구축된 시스템
셋, 검색서비스(Search Serivce)
- 검색엔진을 기반으로 구축한 검색 시스템을 활용해 검색 결과를 서비스로 제공.
3용어의 범위로 보면 아래와 같다고 보시면 될것 같습니다.
- 검색서비스 > 검색 시스템 > 검색엔진
검색 시스템 구성요소
검색 시스템은 보통 아래 요소로 구성되어 있다고 보시면됩니다.
1. 수집기
2.스토리지
3.색인기
4.검색기
각각의 용어를 간단하게 설명해 보자면요.
1.수집기
- 웹사이트, 블로그, 카페 등 웹에서 필요한 정보를 수집하는 프로그램을 말함
2.스토리지
- 데이터베이스에서 데이터를 저장하는 물리적인 저장소
- 검색엔진은 색인한 데이터를 스토리지에 보관함.
3.색인기
- 검색엔진이 수집한 정보에서 사용자 질의와 일치하는 정보를 찾으려면 수집된 데이터를 검색 가능한 구조로 가공하고 저장해야함.
- 그 역할을 하는 것이 바로 색인기
- 색인기는 다양한 형태소 분석기를 조합해 정보에서 의미가 있는 용어를 추출하고 검색에 유리한 역색인 구조로 데이터를 저장함.
4.검색기
- 검색기는 사용자 질의를 입력받아 색인기에서 저장한 역색인 구조에서 일치하는 문서를 찾아 결과로 반환함.
- 질의와 문서가 일치하는지는 유사도기반의 검색 순위 알고리즘으로 판단함.
- 형태소 분석기에 따라 검색 품질이 달라짐
그리고 위에서 언급한 검색 시스템으로 유명한 ElasticSearch 에 대해서 간단하게 정리해드리자면요.
(요즘에 제가 집중적으로 공부하는 부분이 ElasticSearch 에 대한 내용인데요...)
Elasticsearch란?
Elasticsearch는 아파치 루씬을 기반으로 한 분산 검색 및 분석 엔진입니다.
텍스트, 숫자, 위치 기반 정보, 정형 및 비정형 데이터 등 다양한 유형의 데이터를 저장하고 검색할 수 있습니다.
Elasticsearch 특징
Elasticsearch는 다음과 같은 특징을 가지고 있습니다.
1.분산 처리
Elasticsearch는 데이터를 여러 노드로 분산하여 처리할 수 있습니다.
이를 통해 대규모 데이터에 대한 빠른 검색 및 분석을 지원합니다.
2.실시간 검색
Elasticsearch는 데이터가 저장되는 즉시 검색이 가능합니다.
이를 통해 실시간으로 발생하는 데이터를 신속하게 분석할 수 있습니다.
3.JSON 문서
Elasticsearch는 데이터를 JSON 문서 형식으로 저장합니다.
이를 통해 다양한 유형의 데이터를 저장하고 검색할 수 있습니다.
Elasticsearch의 사용 사례
Elasticsearch는 다음과 같은 다양한 분야에서 사용되고 있습니다.
1.웹 검색
Elasticsearch는 웹 검색 엔진의 백엔드에 사용되어 텍스트 및 이미지 데이터를 검색합니다.
2.로그 분석
Elasticsearch는 웹 서버, 애플리케이션, 네트워크 등에서 발생하는 로그 데이터를 분석하여 시스템의 성능 및 안정성을 모니터링합니다.
3.데이터 분석
Elasticsearch는 빅데이터 분석을 위해 사용되어 다양한 유형의 데이터를 분석하고 인사이트를 도출합니다.
Elasticsearch의 장단점
Elasticsearch는 다음과 같은 장단점을 가지고 있습니다.
하나, 장점
빠른 검색: Elasticsearch는 분산 처리를 통해 대규모 데이터에 대한 빠른 검색을 지원합니다.
실시간 검색: Elasticsearch는 데이터가 저장되는 즉시 검색이 가능합니다.
다양한 데이터 지원: Elasticsearch는 다양한 유형의 데이터를 저장하고 검색할 수 있습니다.
둘, 단점
설정 및 관리가 복잡: Elasticsearch는 다양한 기능을 제공하기 때문에 설정 및 관리가 복잡할 수 있습니다.
비용: Elasticsearch는 상용 버전이 제공되며, 비용이 발생할 수 있습니다.
Elasticsearch의 미래
Elasticsearch는 빠른 검색, 실시간 검색, 다양한 데이터 지원 등의 장점을 바탕으로 다양한 분야에서 사용되고 있습니다.
또한, Elastic은 Elasticsearch를 기반으로 다양한 제품과 서비스를 제공하고 있어, 개인적인 생각이지만 Elasticsearch의 미래는 밝다고 할 수 있을것 같습니다.
추가적으로 ElasticSearch 의 개념을 정리해보려고 하는데 그냥 말로 설명드리기보다는 아래와 같이 우리에게 익숙한 RDBMS와 비교해서 한번 표로 작성해보았습니다.
ElasticSearch | RDBMS |
Index | Database |
Shard | Partition |
Type | Table |
Document | Row |
Field | Column |
Mapping | Schema |
Query DSL | SQL |
처음 ElasticSearch 를 공부했을때? Index 란 용어를 듣고 RDBMS 에서 Index 란 용어와 헷갈렸는데요...
같은 Index 지만 ElasticSearch 에서 Index 는 RDBMS 에서 Database 를 의미한다고 보시면 됩니다.
(저처럼 혼동하지 마세요~~^^;)
QueryDSL
Query DSL에 대해서도 간단하게 설명드려보자면요.
Elasticsearch의 Query DSL은 Elasticsearch에서 데이터를 쿼리하고 조작하는데 사용되는 강력한 도구인데요
Query DSL은 JSON 객체로 작성되며 Elasticsearch의 RESTful API를 통해 전송됩니다.
보통 ElasticSearch 로 검색 질의를 요청할때는 Request Body 검색과 URI 검색 모두 _search API 를 이용해 검색을 질의하는데요.
그러나, ElasticSearch 지원하는 QueryDSL 를 이용하면 여러개의 질의를 조합하거나 질의 결과에 대해 다시검색을 수행하는 등 기존의 URI 검색보다 더욱 강력한 검색이 가능합니다.
특히 ElasticSearch 는 정밀한 검색을 위해서 JSON 구조를 기반으로 한 QueryDSL를 제공하고요.
다시한번 말씀드리지만, QueryDSL은 ElasticSearch 의 가장 강력한 기능 중 하나라고 보시면 되며, 다시말해서 이를 이용해서 다양한 검색 조건을 조합하고 표현할 수 있습니다.
QueryDSL 요청구조와 응답구조
QueryDSL의 요청구조와 응답구조를 정리해 볼께요~
기본요청구조는 아래와 같습니다.
- size : 리턴받는 결과의 개수를 지정한다. 기본값은 10
- from : 몇번째 문서부터 가져올지 지정함, 기본값은 0이고, 페이지별로 구성하려면 다음 번 문서는 10번째부터 가지고 오면된다.
- timeout : 검색을 요청해서 결과를 받는데 까지 걸리는 시간을 나타낸다. timeout 시간을 너무 짧게 잡으면 전체 샤드에서 timeout 를 넘기지 않은 문서만 결과로 출력되기 때문에 상황에 따라 결과의 일부만 나올 수 있음. 기본값은 무한대라고 함..
- _source : 검색시 필요한 필드만 출력하고 싶을 때 사용함.
- query: 검색 조건문이 들어가야 하는 공간
- aggs : 통계및 집계 데이터를 사용할때 사용하는 공간
- sort : 문서결과를 어떻게 출력할지에 대한 조건을 사용하는 공간
참고로 ElasticSearch 로 쿼리가 요청되면 해당 쿼리를 파싱해서 문법에 맞는 요청인지 우선 검사한다고 하고요.
파싱에 성공하면 해당쿼리를 기반으로 검색을 수행하며, 결과를 아래와 같이 Json 형태로 제공한다고 하네요.
기본응답구조는 아래와 같습니다.
- took : 쿼리를 실행한 시간을 나타냄
- timeout: 쿼리 시간이 초과할 경우를 나타냄
- _shards.total : 쿼리를 요청한 전체 샤드의 개수
- _shards.successful: 검색요청에 성공적으로 응답한 샤드의 개수
- _shards.failed : 검색요청에 실패한 샤드의 개수
- hits.total : 검색어에 매칭된 문서의 전체 개수
- hits.max_score : 일치하는 문서의 스코어값 중 가장높은 값을 출력
- hits.hits[] : 각 문서 정보와 스코어 값을 보여줌.
예를들면 아래와 같습니다.
Kibana 의 DevTool 메뉴에서 아래와 같이 실행을 하면요.
응답은 아래와 같이 오는거죠
그리고 Elastic Search와 Database 는 데이터의 추가, 수정, 삭제 방식에도 차이가 있다고 보시면 되는데요.
추가,검색,삭제,수정기능을 한번 비교해보면 아래와 같습니다.
ElasticSearch (ft. HTTP Method) | Function | Database |
GET | Data Select | SELECT |
PUT | Data Create | INSERT |
POST | Data Update, Data Select | UPDATE, SELECT |
DELETE | Data Delete | DELETE |
HEAD | Index Information Select | - |
아무튼 여기까지가 말씀드릴 내용이였고요..
앞으로도 Elastic Search에 대해서 주요내용을들을 블로그로 남겨볼 예정입니다.
좋은 하루되세요~
'좋아하는 것_매직IT > 38.EFK' 카테고리의 다른 글
Elasticsearch와 Grok 패턴을 활용한 로그 데이터 파싱 (0) | 2024.01.22 |
---|