역 색인과 일반 이전 색인의 차이점은 무엇입니까?


98

소프트웨어 엔지니어링에서 우리는 항상 인덱스를 생성하지만 (예 : 데이터베이스) 많은 사람들이 반전 인덱스에 대해 이야기하는 것을 들었습니다. 둘 사이에 근본적으로 다른 것이 있습니까? 그들은 같은 소리를냅니다.



명확하게하기 위해 질문 하는 것입니다. 해당 테이블에 이미 존재하는 데이터를 기반으로 테이블을 분류 하는 일반 인덱스 ( en.wikipedia.org/wiki/Index_%28database%29 ) 의 차이점은 무엇 입니까? 그 맞습니까?
jwheron

3
@guidoism 모두가 언급하지 못한 것은 (normalocity가 부분적으로 예제로 설명하고 lovesh가 버튼에 거의 있음에도 불구하고) 반전 된 인덱스가 기본 데이터를 "반전"하여 더 효율적으로 사용한다는 것입니다 (예 : 다른 관점에서 검색하기 위해 키 / 데이터 교체 또는 빠른 검색 알고리즘을 허용하기 위해 알파벳순 / 숫자 순으로 정렬) 표준 인덱스는 데이터를 찾는대로 저장합니다. "뒤로 / 앞으로"참조 및 "반전"이라는 단어의 문자 적 ​​의미는 여기에 적용되지 않고 대신 현재 작업에 특정한 효율적인 형식을 생성하기 위해 데이터 반전을 나타냅니다.
TheManWithNoName apr

답변:


215

일반적인 용도 중 하나는 "... 빠른 전체 텍스트 검색 허용"입니다.

두 가지 유형은 방향성을 나타냅니다 . 하나는 인덱스를 통해 앞으로 이동하고 다른 하나는 인덱스를 통해 뒤로 이동 (반대)합니다. 그게 다야. 여기서 밝혀 낼 수수께끼가 없습니다. 그렇지 않으면 두 유형이 동일합니다. 그것은 당신 이 가지고 있는 정보 와 결과적으로 당신이 찾고자 하는 정보에 대한 질문 일뿐 입니다.

귀하의 문의 사항을 해결하기 위해 실제로 오늘날 사용되는 이유를 알 수있는 방법이 없다고 생각합니다. 것이 중요 유일한 이유는 어떤 정의 forward하고있는 일이 것은 inverted우리가 그들에 대해 대화를 할 수 있도록하고, 모든 사람들이 우리에 대해 얘기하고 방향을 알고있다. "왼쪽"과 "오른쪽"이라는 용어를 생각해보십시오. 이들은 상대적입니다. 단어가 의미를 갖기 위해서는 어느 것이 "왼쪽"이고 어떤 것이 "오른쪽"인지 모두가 동의해야한다는 점을 제외하고는 상관 없습니다. 문화로서 우리가 좌우로 뒤집기로 결정했다면 합의 된 의미가 바뀌었기 때문에 "우회전"과 "좌회전"이 무엇인지 파악하는 데 동일한 문제가있을 것입니다. 그러나 이름은 임의적입니다. 의미에.

"용어를 정의하지 마십시오"라고 묻는 귀하의 의견에서 요점을 놓치고있는 것입니다. 그리고 그들 사이에 전혀 차이가 없을 때 단어에 얽매이는 것 같습니다.


향후 독자를 위해 몇 가지 "앞으로"및 "반전 된"색인 예제를 제공하겠습니다.

예 1 : 웹 검색

인덱스의 역이 수학 에서 함수역과 같다고 생각한다면, 역은 다른 형태를 가진 특별한 것입니다. 여기에서는 그렇지 않습니다.

검색 엔진에는 문서 목록 (웹 사이트의 페이지)이 있으며 여기에서 키워드를 입력하고 결과를 다시 얻을 수 있습니다.

기대 지수 (또는 인덱스)는이다 문서의 목록 , 그리고 어떤 단어 것은 그들에 나타납니다. 웹 검색 예에서 Google은 웹을 크롤링하여 문서 목록을 작성하고 각 페이지에 나타나는 단어를 파악합니다.

반전 지수 는 IS 단어의 목록 , 그리고 그들이 표시되는 문서. 웹 검색 예에서 단어 목록 (검색 쿼리)을 제공하면 Google이 문서 (검색 결과 링크)를 생성합니다.

그것들은 둘 다 색인입니다. 그것은 당신이 어떤 방향으로 가고 있는지에 대한 질문 일뿐입니다. 정방향은 문서-> 대-> 단어에서, 반전은 단어-> 대-> 문서에서입니다.

예 2 : DNS

또 다른 예는 DNS 조회 (호스트 이름을 받아 IP 주소를 반환)와 역방향 조회 (IP 주소를 받아 호스트 이름을 제공)입니다.

예 3 : 책

책 뒷면의 색인은 위의 예에서 정의한 것처럼 실제로 역 색인 입니다. 단어 목록과 책에서 찾을 수있는 위치입니다. 책에서 목차는 정방향 색인과 같습니다. 이는 책에 포함 된 문서 (장)의 목록입니다. 단, 해당 섹션에 단어를 나열하는 대신 목차는 내용에 대한 이름 / 일반 설명 만 제공합니다. 해당 문서 (챕터)에 포함되어 있습니다.

예 4 : 휴대 전화

휴대 전화 의 정방향 색인 은 연락처 목록이며 이러한 연락처와 연결된 전화 번호 (휴대폰, 집, 직장)입니다. 그만큼역 색인은 수동으로 전화 번호를 입력 할 수 있습니다 것입니다, 당신이 명중 할 때 휴대 전화가 전화 번호를 가지고 있기 때문에, 당신은 오히려 수보다, 그 사람의 이름을 볼 "전화"당신에게 그와 관련된 접촉을 발견했다.


11
시간 내 주셔서 감사합니다. 그러나 당신의 대답은 여전히 ​​유익하지 않습니다. 바운티 요청에서 언급했듯이 관련된 용어의 의미와 그 이유를 이해합니다. 내 질문은 : "우리가 평범한 색인이라고 부르는 오랜 전통을 가지고 있는데 왜 역 색인을 명명 한 사람들이 역 색인이라고 부르는가? 예를 들어, 당신이 지적한 것처럼 책 끝에있는 색인은 실제로 역 색인입니다. 역사적 관점에서 책 끝에있는 색인은 웹 색인보다 앞섰습니다. 그렇다면 왜 전통을 뒤집을까요? " 내 생각 엔 ... 그냥 단지 일어난 일들 중 하나이다
Manav

1
"나는 그 용어의 사용에 대한 역사적 조사를 실시하지 않고는 이유를 알 수 없다고 생각한다"-나는 누군가 그러한 역사적 조사를 수행하고 답을 주었으면했다. :-) 이것은 "인덱스"의 공통 언어 의미와 반대이기 때문에 놀랍습니다. (한 가지 가능한 대답은 "inverted index"라는 문구가 처음 생각되었을 때 "index"라는 문구가 이미 일부 "index"inverted wrt "inverted index"에 대한 것입니다. 즉, "index"의 실제 의미를 거꾸로했습니다. ".이 경우 포워드"인덱스 "에 이상한 이름이 붙은 이유를 아는 것이 유용 할 것입니다.)
ShreevatsaR

2
@jefflunt는 왜 순방향 인덱싱을 사용 해야하는지 궁금합니다. 저는 특히 여기에서 웹 검색 예제에 대해 이야기하고 있습니다. 그래서 앞으로 색인의 일부가 마찬가지로 구글이 경우 문서의 목록을 <-> 그 단어 , 궁극적으로 사용하는 단어의 목록을 <-> 문서 목록 자신의 검색은 왜 할 문서의 목록을 <-> 단어의 그들 ? 즉, 내 질문은 다음과 같습니다. 특정 페이지 (문서)에 어떤 단어가 있는지 Google에 물어볼 수 없거나 주로 찾고있는 키워드가 페이지에서 어디에 있는지 묻습니다. 그렇다면 왜 순방향 인덱싱을합니까?
quickbrownfox

1
관계형 데이터베이스의 맥락에서 반전 된 인덱스가 없습니까? 또는 해당 인덱스는 실제로 '반전 된 인덱스'입니다. 문학에서 "동의 할 수있는"용어의 문제는 서로 다른 합의를 시작하고 커뮤니티의 일부가 그 명명법을 따르는 소수의 개척자 또는 군단에 의한 무지 / 실수 / 심의입니다. 누구나 언젠가는 혼란스러워집니다. 원래 소프트웨어에는 A라고 말할 수 있도록 의도 된 용어가 많이 있지만 다른 커뮤니티에서는 의도적으로 또는 실수로 구문 적으로 A '또는 B로 간주합니다. 그것은 여전히 ​​새로운 학습자를 혼란스럽게합니다.
nir

1
@Roylee-백서를 읽지 않았습니다. 당신이 묻는 것은 "정방향 인덱스를 업데이트 할 때 반전 된 인덱스를 업데이트합니까?"라고 생각합니다. 그것이 귀하의 질문이라면 대답은 '예'입니다.
jefflunt

26

그들은 이미 전방 지수가 있기 때문에 그것을 반전이라고 불렀습니다. 두 부분으로 구성된 검색 엔진의 예를 들어 보겠습니다. 첫 번째 부분은 문서에서 단어로 색인을 작성하는 "웹 크롤러 및 파서"이고, 두 번째 부분은 단어에서 문서로 색인을 작성하는 검색 데이터베이스입니다. 첫 번째 인덱스가 존재하기 때문에 자연스럽게 두 번째 인덱스를 역 인덱스라고 부릅니다.

책의 목차 (목차)를 색인으로 지정하면 책 끝에있는 색인을 "역 색인"으로 호출해야합니다. 또는 반대로 TOC를 역 인덱스로 호출 할 수 있습니다.


6
이것은 모든 사람들이 "정상 인덱스"라고 생각하는 것임에도 불구하고 우리가 인덱스를 "반전"이라고 부르는 이유에 대한 질문에 대한 답으로 받아 들여 져야합니다. SQL b- 트리 인덱스는 각 단어에 대해이를 포함하는 모든 행 ( "문서")에 대한 포인터를 저장합니다. 여기서 우리는 그것을 "인덱스"라고 부릅니다. 그러나 검색 엔진에서 우리는 갑자기 이와 똑같은 절차를 "역 인덱스"라고 부릅니다. 근본적으로 다르기 때문이 아니라 먼저 "앞으로 색인"(텍스트 분할)을 만든 다음 "반전"하기 때문입니다. 따라서 대체로 "inverse"라는 이름은 색인의 최종 구조가 아니라 생성 과정에서 비롯됩니다.
Foo Bar

@xeranic 통찰력에 감사드립니다. 빠른 질문 : 역 색인이 작성된 후 정방향 색인 파일에서 항목을 제거하는 것이 실용적입니까?
로이 리

3
@FooBar에 동의합니다. 이 답을 정답으로 선택해야합니다. 그것은 inverted index 우리 삶의 모든 정상적인 색인이 이미 inverted.
Ryan Lyu

7

일반적으로 인덱스에 대해 말할 때 애플리케이션 속도를 높이기 위해 수행 된 일부 추가 계산 또는 저장된 프로 시저 결과를 의미합니다 (예 : MySQL 또는 기타 RDBMS Consult MySQL the docs). ). 인덱싱은 캐싱 등과 관련 될 수도 있습니다.

역 인덱스는 주로 (전체 텍스트) 검색을위한 구조로 파일을 생성합니다.

반전 된 인덱스는 두 개의 기본 파일로 구성됩니다.

  • 어휘
  • 발생

어휘에는 텍스트에서 추출한 일반적인 단어가 있습니다 (물론 대명사와 같은 블랙리스트 단어를 필터링 한 후). 발생 파일은 단어와 문서 간의 연결을 유지합니다 (word1은 doc3이 아닌 doc1 및 doc2에 나타남). 그것은 행렬의 형태로 표현됩니다.

인덱싱 프로세스-반전 된 인덱스

위의 이미지는 언급 된 두 파일을 만드는 과정을 보여줍니다.

이 문제에 더 관심이 있다면 Ricardo Yated-Modern Information Retrieval ( 아마존에서보기)이 쓴 훌륭한 책을 추천 할 수 있습니다 .

도움이 되었기를 바랍니다 :-)


이것은 역 인덱스가 실제로 무엇인지 설명하므로 매우 좋은 대답입니다. 그것은 정방향 색인화 및 역 색인화의 개념을 넘어서게되는데, 이는 색인 생성 및 반전을 통해 활성화되는 검색 기능에 사용되는 알고리즘과는 다릅니다.
AN6U5 2017-06-13

6

normalocity 는 이미 forward index와 inverted index를 훌륭하게 구분 했지만, 왜 하나는 forward index이고 다른 하나는 inverted index라고 부르는 이유에 대해서는 아마도 이것이 그들이 그렇게 불리는 이유 일 것입니다.

검색 엔진 크롤링 및 색인 생성 (또는 책 색인 작성)의 예를 들어, 웹 페이지를 크롤링 (또는 책 읽기)하거나 앞으로 진행 하는 동안 정방향 색인을 동시에 작성할 수 있습니다 . 따라서 크롤링 할 웹 페이지가 10 개 (또는 책에 10 개의 장)가있는 경우 첫 번째 웹 페이지를 크롤링 (첫 번째 장 읽기) 한 다음 웹 페이지에 나타나는 단어 (장에 나타나는 단어) 목록을 만들고 계속할 수 있습니다. 다른 웹 페이지 (다른 장)에 대해이 프로세스를 수행하므로 10 개의 웹 페이지를 모두 크롤링 할 때 (10 개 장 모두 읽기) 순방향 색인은 포함 된 단어 목록을 가리키는 각 웹 페이지 (챕터)로 완성됩니다 .

그러나 반전 된 색인을 만들려면 10 개의 웹 페이지를 모두 크롤링 (10 개의 장을 읽음) 한 다음 각 문서 목록에서 각 단어를 가져 와서 해당 단어가 포함 된 문서를 찾아야합니다. 따라서 이것은 웹 페이지를 크롤링 한 후 뒤로 이동하는 것과 같습니다 (책의 챕터 읽기). . 그래서 그것은 역 인덱스라고 불립니다.

이것은 단지 내 추측입니다.


5

색인에는 여러 유형이 있습니다. 예를 들어, B- 트리, R- 트리, 해시 ... 다른 목적을 위해 올바른 인덱스를 선택해야합니다.

반전 인덱스는 특별한 것입니다. 일반적으로 전체 텍스트 검색 엔진에서 사용되는 반전 된 인덱스입니다. 역 색인을 사용하면 문서 (또는 문서 세트)에서 가능한 한 빨리 단어의 위치를 ​​찾을 수 있습니다. 메모리와 CPU의 한계를 생각해보십시오. 다른 인덱스로는이 작업을 완료 할 수 없습니다.

자세한 내용은 lucene 문서를 읽을 수 있습니다. 오픈 소스 검색 엔진입니다. http://lucene.apache.org/java/docs/index.html


3

"반전 된 단어 색인"이라는 용어는 여러 단어를 포함하는 단일 문서와 여러 문서 목록을 포함하는 (또는 식별하는) 각 고유 단어의 관계 변경을 나타냅니다. 이것은 효과적으로 일대 다 관계 (Docs to Words)를 취하고이를 반전 (또는 반전)하여 새로운 "반전 된"일대 다 관계가 존재하도록하는 것입니다. 이는 Many-와 관련된 각각의 고유 한 단어입니다. 문서 (즉, 해당 단어가 포함 된 모든 문서). 그 기원은 정말 간단합니다. "역 인덱스"라는 용어는 컴퓨터와 전자 고속 인덱싱이 존재하기 훨씬 이전에 동일한 유형의 수동 인덱스를 설명하는 데 사용되었습니다 (예, 저는 오래되고 괴짜 프로그래머입니다. Grace Hopper를 "달콤한 아가씨"라고 생각할만큼 나이가 들었습니다. COBOL이 반짝이는 새로운 언어 였을 때 구애하기에 적절한 나이). 우리는 가끔 유용하고 아마도 귀중한 역사적인 정보 비트를 제공 할 수 있으므로 아직 우리를 버리지 마십시오. 개인 RAM이 여전히 작동 중일 때입니다. [이를 드러내고 웃다]


2

반전 된 인덱스에서는 다음과 같은 형식이 있습니다.

word1-> 발생하는 문서 목록 (정렬 된 순서)

word2-> 발생하는 문서 목록 (정렬 된 순서)

.NET에서 단어가 나오는 문서를 찾을 수 있으므로 검색 엔진 쿼리 처리에 매우 유용합니다.

감독되는 머신리스를 사용하여이 역 색인을 작성할 수 있습니다.


6
그것은 나에게 색인처럼 들리는데, 그것에 대해 반전 된 것은 무엇입니까?
guidoism

2
@guidoism 반전 된 인덱스는 정방향 인덱스의 반전입니다. 정방향 색인은 각 문서에 대한 단어 목록을 저장합니다. 예 : Doc-> w1, w2
프로그래머

나는 여전히 Forward와 Inverted 인덱스의 차이점을 찾지 못했습니다 (작동 방식 측면에서 이름 지정 비트는 그대로 둡니다). 나에게 둘 다 필드를 문서 ID 무리에 매핑하는 색인처럼 보입니다. 이것이 오라클 btree (또는 forward index라고도 함)가 데이터를 구성하는 방법을 이해 한 방법입니다. 역 지수 원칙에는 차이가 없습니다. 문서 매핑-> w1, w2, w3은 검색 측면에서 나에게 비효율적 인 제안처럼 보입니다. 왜 이것이 처음인지 궁금하십니까? 그러면 다시 원점으로 돌아갑니다. :-).
user1189332

@Programmer 빠른 질문 : 반전 된 인덱스가 작성된 후 정방향 인덱스 파일에서 항목을 제거하는 것이 실용적입니까?
로이 리

0

또 다른 차이점 :

반전 된 인덱스로 업데이트를 처리하는 것은 순방향 인덱스에 비해 비용이 많이 듭니다.

정방향 인덱스는 해당 문서 인덱스의 변경 사항 만 반영하여 업데이트를 쉽게 처리하는 반면, 반전 된 인덱스에서는 동일한 변경 사항이 반전 된 인덱스의 여러 위치에 반영되어야합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.