인덱스의 구성 부분 - 사전
Please don't assume the dictionary as the python dictionary/HashMap. There is more to it.
😌포괄할 주제
* Overview and need for Dictionary
* Supported Operations
* Types of Dictionary
* Sort-based Dictionary
* Hash-based Dictionary
* Which one is better?
개요
우리 는 이전 문장 에서 본 역렬 색인 의 간단한 표시 를 되돌아보자
In this article, we are going to focus on the term column in the Inverted Index representation in the above diagram.
이 용어열은 우리 집합의 모든 단어/용어를 포함하기 때문에, 우리도 이를 역방향 색인 사전이라고 부른다.🙋 그런데 왜 나는 사전 한 권이 필요합니까?
답안도 간단하다. 그림에서 보듯이 사전 용어의 주요 목적은 텍스트 집합의 용어 그룹을 관리하고 색인 용어 집합에서 발표 목록 위치까지 비추는 것이다.과금 목록 열은 데이터를 포함하지 않고 실제 데이터에 저장된 포인터/인용을 가리키며, 메모리나 디스크에서 사용할 수 있는 실제 텍스트 데이터에 대한 인용일 뿐입니다.
사전 지원 작업🚀
역방향 색인/검색 엔진의 "기본"사전은 일반적으로 다음과 같은 작업을 제공합니다.
사전에 새 항목 삽입
우리 아름다운 사전의 문제는 무엇입니까?❓
내 사전에 10000000개의 용어가 있다고 가정해 봐.나는 이 사전에서 "Scranton"이라는 단어를 검색할 계획이다.이 자체가 문제가 되었다. 사전에서 스캔/회색을 하면 O(n)의 시간 복잡도를 초래하기 때문이다.우리는 어떻게 그것을 줄일 수 있습니까?지금 앉아서 제가 가장 자주 사용하는 두 가지 방법으로 설명해 드릴게요.
사전 용어 유형 저장:
정렬 기반 사전👀
말 그대로 이 실현은 우리의 텍스트 집합(일명 사전)을 바탕으로 정렬 형식의 배열이다.이런 사전 정렬 형식은 두 가지 방식을 통해 실현할 수 있는데, 하나는 정렬 수조이고, 다른 하나는 검색 트리이다.정렬 수조에 대해서는 이진 검색을 사용하여 텍스트 집합 (사전이라고도 함) 을 검색하고, 검색 트리에 대해서는 트리를 사용합니다.
해시 기반 사전👀
해시 기반 사전에 대해 우리는 해시 표를 사용할 수 있다.그 중에서 모든 용어는 해시표에 상응하는 항목이 있다.우리가 특정 용어를 검색할 때, 해시표의 속도는 놀랍게도 빠르지만, 이것도 함정이 있다. 우리는 본문 뒤에서 토론할 것이다. (즉 접두사 일치)그 밖에 대부분의 사람들은 검색과 삽입이 해시 테이블에서 O(1)의 시간 복잡도로 발생한다고 생각하지만 사실은 그렇지 않다.이 점을 이해하려면 stackoverflow 에서 이 답을 읽을 수 있습니다
해시와 정렬 기반 사전 간의 비교🚀
이 때문에 아마존 같은 사이트의 자동 완성 기능은com은 백그라운드 어딘가의 제품 디렉터리 데이터에 접두사를 사용합니다. 속도를 놀라게 하려면 O(n) 시간의 복잡도 내에서 사용할 수 없습니다. 이것은 반드시 O(log(n)) 이상이어야 합니다.이런 데이터 구조는 속도가 놀라운 검색 트리가 가장 좋다.
또한 이것은 모든 검색엔진이나 역방향 색인에 필요한 주요 기능입니다. 하루가 끝날 때 "lap"을 입력하고 그림과 같은 옵션을 얻을 수 있기 때문입니다.
(받아들여, 너는 이 기능을 좋아해, 너는 매일 그것을 사용하고, 이 빌어먹을 물건을 받아들여)😜
🙋 그렇다면 어떤 정렬 기반 사전과 해시 기반 사전이 더 좋을까?
토마스 소엘은 해결책은 없고 따져봐야 한다고 말한 적이 있다.
따라서 토마스의 진술을 감안하면 답은 검색 트리의 정렬 기반 사전을 사용하는 것이다.(물론 조회 처리 시간에 있어서 적당한 균형이 있다.)
접두사 조회 지원, 예측 가능한 성능 외에 내가 왜'정렬 기반 인덱스가 더 좋다'고 말하는지 설명할 수 있는 또 다른 이유가 있다.루첸이라고 들어보셨나요?elastic search와 Solr under the hood가 사용하는 가장 유행하는 검색엔진입니다.
메모리 인덱스 Apache Lucene 전체 텍스트 검색 인덱스의 경우 Lucene은 정렬 기반 사전 방법을 사용합니다.내가 직접 원본 코드를 검사하는 것을 믿지 않을 것이다.여기 있다
(I have asked the Lucene committers to confirm this, will update this too after getting the confirmation from them)
상금 Gyaan:참고: SortedMap은 아름다운 붉은색과 검은색 나무에 불과합니다.🖖
또 토마스 콤(Thomas Cormem)의 신성한'알고리즘 소개'에서 "붉은색과 검은색 나무는 좋은 검색 나무"라고 말했다.증명은 309페이지 참조.나는 미래의 몇몇 게시물에서 이 점을 긍정적으로 이야기할 것이다.당신이 여기에서 링크를 가입할 수 있기를 바랍니다.
따라서 우리는 본고에서 사전 실현 간의 모든 주요 균형을 논의했다.다음 글에서 우리는 사전의 실현과 관련된 내용, 즉 용어의 표기화를 다시 한 번 연구할 것이다.지금까지 우리는 문장/문서 사이의'공간'만을 고려하여 용어를 식별했지만 아직 고려해야 할 다른 일이 많다.
그리고 당신이 이 글을 좋아하길 바랍니다. 그것은 당신에게 도움이 될 것입니다.여느 때와 마찬가지로, 나는 이 일련의 건의와 피드백을 받아들이고 싶다.
Reference
이 문제에 관하여(인덱스의 구성 부분 - 사전), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/im_bhatman/components-of-inverted-index-the-dictionary-1gf5텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)