Sự khác biệt giữa chỉ mục đảo ngược và chỉ mục cũ đơn thuần là gì?


98

Trong kỹ thuật phần mềm, chúng tôi tạo chỉ mục mọi lúc (ví dụ: trong cơ sở dữ liệu) nhưng tôi cũng nghe nhiều người nói về các chỉ số đảo ngược. Có điều gì đó khác nhau về cơ bản giữa cả hai? Chúng nghe giống như một điều.



Để làm rõ, bạn đang hỏi: có gì khác biệt về chỉ mục bình thường ( en.wikipedia.org/wiki/Index_%28database%29 ) chia nhỏ một bảng dựa trên dữ liệu đã tồn tại trong bảng đó? Đúng không?
jwheron

3
@guidoism Điều mà mọi người không đề cập đến (mặc dù normalocity một phần mô tả nó bằng các ví dụ và loveh nằm khá nhiều trên nút) là các chỉ mục đảo ngược "đảo ngược" dữ liệu cơ bản để hiệu quả hơn (ví dụ: hoán đổi khóa / dữ liệu để tìm kiếm từ các góc độ khác nhau hoặc sắp xếp theo thứ tự bảng chữ cái / số để cho phép các thuật toán tìm kiếm nhanh), trong khi một chỉ mục tiêu chuẩn lưu trữ dữ liệu khi nó tìm thấy nó. Các tham chiếu "lùi / tiến" và nghĩa đen của từ "đảo ngược" không áp dụng ở đây, thay vào đó nó đề cập đến sự đảo ngược dữ liệu để tạo ra một định dạng hiệu quả cụ thể cho nhiệm vụ hiện tại.
TheManWithNoName

Câu trả lời:


215

Một cách sử dụng phổ biến là "... để cho phép tìm kiếm toàn văn bản nhanh chóng."

Hai loại biểu thị hướng . Một cái đưa bạn tiến qua chỉ mục và cái kia đưa bạn lùi (nghịch đảo) qua chỉ mục. Đó là nó. Không có bí ẩn nào để khám phá ở đây. Nếu không thì hai loại này giống hệt nhau, chỉ là câu hỏi bạn thông tin gì và kết quả là bạn đang cố gắng tìm thông tin gì .

Để giải quyết thắc mắc của bạn, tôi không nghĩ thực sự có cách nào để biết tại sao việc sử dụng nó lại như ngày nay. Lý do duy nhất điều quan trọng là phải xác định cái nào là forwardvà cái nào invertedlà để tất cả chúng ta có thể trò chuyện về chúng và mọi người đều biết chúng ta đang nói về hướng nào. Hãy nghĩ về các thuật ngữ "trái" và "phải": chúng là tương đối. Cái nào không quan trọng, ngoại trừ việc mọi người cần thống nhất cái nào là "trái" và cái nào là "phải" để các từ có nghĩa. Nếu, với tư cách là một nền văn hóa, chúng tôi quyết định lật trái và phải, thì bạn sẽ gặp vấn đề tương tự khi tìm hiểu thế nào là "rẽ phải" và "rẽ trái" vì ý nghĩa theo thỏa thuận đã thay đổi. Tuy nhiên, việc đặt tên là tùy ý, về ý nghĩa.

Trong nhận xét của bạn, nơi bạn hỏi, "vui lòng không chỉ định nghĩa các thuật ngữ", bạn đang thiếu điểm và tôi nghĩ bạn chỉ đang bị mắc kẹt với từ ngữ khi hoàn toàn không có sự khác biệt giữa chúng.


Vì lợi ích của những độc giả trong tương lai, bây giờ tôi sẽ cung cấp một số ví dụ về chỉ mục "chuyển tiếp" và "đảo ngược":

Ví dụ 1: Tìm kiếm trên web

Nếu bạn đang nghĩ rằng nghịch đảo của một chỉ số giống như nghịch đảo của một hàm trong toán học , trong đó nghịch đảo là một thứ đặc biệt có dạng khác, thì bạn đã nhầm: đó không phải là trường hợp ở đây.

Trong công cụ tìm kiếm, bạn có một danh sách các tài liệu (các trang trên các trang web), nơi bạn nhập một số từ khóa và nhận lại kết quả.

Một chỉ số về phía trước (hoặc chỉ index) là danh sách các tài liệu , và những từ xuất hiện trong đó. Trong ví dụ tìm kiếm trên web, Google thu thập dữ liệu web, xây dựng danh sách tài liệu, tìm ra những từ nào xuất hiện trong mỗi trang.

Các chỉ số đảo ngượcdanh sách các từ , và các văn bản, trong đó họ xuất hiện. Trong ví dụ tìm kiếm trên web, bạn cung cấp danh sách các từ (truy vấn tìm kiếm của bạn) và Google tạo ra các tài liệu (liên kết kết quả tìm kiếm).

Cả hai đều là chỉ mục - vấn đề chỉ là bạn đang đi theo hướng nào. Chuyển tiếp là từ tài liệu-> đến-> từ, đảo ngược là từ từ-> đến-> tài liệu.

Ví dụ 2: DNS

Một ví dụ khác là tra cứu DNS (lấy tên máy chủ và trả về địa chỉ IP) và tra cứu ngược (lấy địa chỉ IP và cung cấp cho bạn tên máy chủ).

Ví dụ 3: Một cuốn sách

Chỉ mục ở phía sau của một cuốn sách thực sự là một chỉ mục đảo ngược , như được định nghĩa bởi các ví dụ ở trên - một danh sách các từ và nơi tìm chúng trong sách. Trong một cuốn sách, mục lục giống như một chỉ mục chuyển tiếp : đó là danh sách các tài liệu (chương) mà cuốn sách chứa đựng, ngoại trừ việc thay vì liệt kê các từ trong các phần đó, mục lục chỉ đưa ra tên / mô tả chung về những gì. có trong các tài liệu (chương) đó.

Ví dụ 4: Điện thoại di động của bạn

Các chỉ số về phía trước trong điện thoại di động của bạn là danh sách các địa chỉ liên lạc, và trong đó số điện thoại (di động, nhà, nơi làm việc) được liên kết với các địa chỉ liên lạc. Các chỉ số đảo ngược là những gì cho phép bạn tự nhập số điện thoại, và khi bạn nhấn "quay" bạn nhìn thấy tên của người đó, chứ không phải là số lượng, vì điện thoại của bạn đã đưa ra những số điện thoại và tìm thấy bạn liên lạc liên kết với nó.


11
cảm ơn bạn đã dành thời gian. nhưng câu trả lời của bạn vẫn không thông tin. Như tôi đã đề cập trong yêu cầu tiền thưởng của mình, tôi hiểu ý nghĩa của các điều khoản liên quan và lý do tại sao chúng phát sinh. Câu hỏi của tôi là: "tại sao những người đặt tên cho các chỉ mục ngược lại gọi chúng là đảo ngược trong khi chúng ta có một truyền thống lâu đời gọi chúng chỉ là các chỉ mục đơn giản? Ví dụ: các chỉ mục ở cuối sách, như bạn đã chỉ ra, thực sự bị đảo ngược. Tiếp tục theo quan điểm lịch sử, các chỉ mục ở cuối sách đến trước chỉ mục web. Vậy tại sao lại đảo ngược truyền thống? ". Tôi đoán rằng đó chỉ là một trong những điều vừa xảy ra ...
Manav

1
"Tôi không nghĩ có thể biết tại sao nếu không tiến hành một cuộc kiểm tra lịch sử về việc sử dụng các thuật ngữ" - Tôi đã hy vọng ai đó sẽ tiến hành một cuộc kiểm tra lịch sử như vậy và đưa ra câu trả lời. :-) Bởi vì điều này đối lập với ý nghĩa ngôn ngữ thông thường của "chỉ mục" là đáng ngạc nhiên. (Một câu trả lời có thể là khi cụm từ "chỉ mục đảo ngược" được nghĩ đến lần đầu tiên, cụm từ "chỉ mục" đã được dùng cho một số "chỉ mục" ngược wrt "chỉ mục ngược", tức là, wrt đảo ngược ý nghĩa thực tế của "chỉ mục ". Trong trường hợp đó, nó sẽ là hữu ích để biết lý do tại sao phía trước 'chỉ số' có tên kỳ lạ).
ShreevatsaR

2
@jefflunt chỉ tự hỏi tại sao nên sử dụng chỉ mục chuyển tiếp. Tôi đặc biệt nói về ví dụ tìm kiếm trên web ở đây. Vì vậy, nếu google, như một phần của lập chỉ mục chuyển tiếp danh sách tài liệu <-> từ trong đó và cuối cùng sử dụng danh sách từ <-> danh sách tài liệu trong tìm kiếm của họ, tại sao danh sách tài liệu <-> từ trong họ ? Nói cách khác, câu hỏi của tôi là: Người ta không thể hỏi google có những từ nào trong một trang (tài liệu) cụ thể hoặc chủ yếu hỏi những từ khóa mà anh / cô ấy đang tìm kiếm xuất hiện ở đâu trong các trang. Sau đó, tại sao phải lập chỉ mục chuyển tiếp?
quickbrownfox

1
Vì vậy, trong ngữ cảnh của cơ sở dữ liệu quan hệ không có chỉ mục đảo ngược? hoặc những chỉ mục đó thực sự là 'chỉ mục đảo ngược'. Các vấn đề với thuật ngữ "dễ hiểu" trong văn học là sự thiếu hiểu biết / sai lầm / cố ý của một số người tiên phong hoặc quân đoàn bắt đầu thỏa thuận khác nhau và một phần cộng đồng tuân theo danh pháp đó. Mọi người đều bối rối sau một thời gian. Tôi chắc rằng có nhiều thuật ngữ trong phần mềm ban đầu được dùng để nói A nhưng một cộng đồng khác cố tình hoặc nhầm lẫn nó thành A 'hoặc B, sai về mặt cú pháp. Nó vẫn khiến người mới học nhầm lẫn.
nir

1
@Roylee - Tôi chưa đọc sách trắng đó. Tôi nghĩ điều bạn đang hỏi là "Bạn có cập nhật chỉ mục ngược khi cập nhật chỉ mục chuyển tiếp không?" Nếu đó là câu hỏi của bạn, thì câu trả lời là có.
jefflunt

26

Họ gọi nó là đảo ngược chỉ vì đã có một chỉ số chuyển tiếp. Lấy ví dụ về công cụ tìm kiếm, nó bao gồm hai phần: phần đầu tiên là "trình thu thập thông tin và phân tích cú pháp web" xây dựng chỉ mục từ tài liệu này sang từ khác, phần thứ hai là cơ sở dữ liệu tìm kiếm xây dựng chỉ mục từ từ này sang tài liệu khác. Bởi vì chỉ mục đầu tiên tồn tại, chúng tôi đương nhiên gọi chỉ mục thứ hai là chỉ mục đảo ngược.

Nếu bạn đặt tên TOC (Mục lục) của sách là chỉ mục, thì bạn nên gọi chỉ mục ở cuối sách là "chỉ mục ngược". Hoặc, theo cách khác, bạn có thể gọi TOC là chỉ số đảo ngược.


6
Đây phải là câu trả lời được chấp nhận vì nó trả lời câu hỏi tại sao chúng ta gọi một chỉ mục là "đảo ngược" ngay cả khi nó chỉ là những gì mọi người nghĩ về "chỉ mục bình thường". Chỉ mục b-tree của SQL lưu trữ cho mỗi từ một con trỏ tới tất cả các hàng ("tài liệu") chứa nó. Ở đó chúng tôi gọi nó là "chỉ mục". Nhưng trong các công cụ tìm kiếm, chúng tôi đột nhiên gọi quy trình tương tự này là "chỉ mục ngược". Không phải vì nó khác về cơ bản, mà bởi vì trước tiên chúng tôi tạo một "chỉ mục chuyển tiếp" (phân tách văn bản) và sau đó "nghịch đảo" nó. Vì vậy, nhìn chung, cái tên "nghịch đảo" đến từ quá trình tạo ra nó, không phải từ cấu trúc cuối cùng của chỉ mục.
Foo Bar

@xeranic cảm ơn vì những thông tin chi tiết. Câu hỏi nhanh: Có thực tế để loại bỏ các mục nhập khỏi tệp chỉ mục chuyển tiếp sau khi chỉ mục ngược được tạo từ nó không?
Roy Lee

3
Tôi đồng ý với @FooBar. Câu trả lời này nên được chọn là câu trả lời đúng. Nó trả lời tại sao chúng tôi phát minh ra một thuật ngữ mới inverted index mặc dù tất cả các chỉ số bình thường trong cuộc sống của chúng tôi đã được sử dụng như inverted.
Ryan Lyu

7

thông thường khi nói về chỉ mục, bạn có nghĩa là một số tính toán được thêm vào hoặc kết quả được lưu trữ của các thủ tục đã được thực hiện để tăng tốc ứng dụng (ví dụ: MySQL hoặc RDBMS khác Tham khảo tài liệu về MySQL ). Lập chỉ mục cũng có thể liên quan đến bộ nhớ đệm, v.v.

Chỉ mục ngược tạo tệp có cấu trúc chủ yếu là tương tác để tìm kiếm (toàn văn bản).

Chỉ mục được đảo ngược bao gồm hai tệp chính:

  • Từ vựng
  • Sự xuất hiện

Trong từ vựng là những từ thông dụng được trích xuất từ ​​văn bản (tất nhiên sau khi lọc những từ trong danh sách đen như đại từ). Tệp Occurences giữ kết nối giữa các từ và tài liệu (word1 xuất hiện trong doc1 và doc2, không xuất hiện trong doc3). Nó được biểu diễn dưới dạng ma trận.

Quy trình lập chỉ mục - chỉ mục đảo ngược

Trong hình trên là quá trình tạo hai tệp được đề cập.

Nếu bạn quan tâm hơn nữa đến vấn đề này, tôi có thể giới thiệu cho bạn một cuốn sách tuyệt vời được viết bởi Ricardo Yated - Truy xuất thông tin hiện đại ( Xem nó trên Amazon ) - tôi nghĩ là khoảng trang 200.

Hy vọng nó giúp :-)


Đây là một câu trả lời rất hay vì nó giải thích chỉ số đảo ngược thực sự là gì. Nó vượt qua ý tưởng lập chỉ mục chuyển tiếp và lập chỉ mục ngược, khác với thuật toán được sử dụng cho khả năng tìm kiếm được kích hoạt bằng cách tạo và chỉ mục đảo ngược.
AN6U5

6

normalocity đã phân biệt tuyệt vời giữa một chỉ số chuyển tiếp và một chỉ số đảo ngược nhưng đối với câu hỏi tại sao một cái được gọi là chỉ số chuyển tiếp và cái kia là chỉ số đảo ngược, có lẽ đây là lý do tại sao chúng được gọi như vậy ---

Lấy ví dụ về thu thập thông tin và lập chỉ mục của công cụ tìm kiếm (hoặc xây dựng chỉ mục cho một cuốn sách), chỉ mục chuyển tiếp có thể được tạo đồng thời trong khi bạn đang thu thập thông tin các trang web (hoặc đọc sách) hoặc tiếp tục . Vì vậy, nếu bạn có 10 trang web để thu thập thông tin (hoặc 10 chương trong một cuốn sách), bạn có thể thu thập dữ liệu trang web đầu tiên (đọc chương đầu tiên), sau đó tạo danh sách các từ xuất hiện trong trang web (các từ xuất hiện trong chương) và tiếp tục quy trình này cho các trang web khác (các chương khác) vì vậy vào thời điểm bạn đã thu thập dữ liệu tất cả 10 trang web (đọc tất cả 10 chương), chỉ mục chuyển tiếp của bạn đã hoàn tất với mỗi trang web (chương) trỏ đến danh sách các từ mà nó chứa .

Nhưng để tạo một chỉ mục đảo ngược, bạn phải thu thập dữ liệu của tất cả 10 trang web (đọc 10 chương) và sau đó lấy từng từ từ mỗi danh sách tài liệu và tìm ra tài liệu nào chứa từ đó. Vì vậy, điều này giống như quay ngược lại khi bạn đã thu thập dữ liệu các trang web (đọc các chương của cuốn sách) . Vì vậy, nó được gọi là một chỉ số đảo ngược.

Đây chỉ là suy đoán của tôi.


5

Có nhiều loại chỉ số. Ví dụ: B-tree, R-tree, hash ... Với các mục đích khác nhau, chúng ta phải chọn đúng chỉ mục.

Chỉ số đảo ngược là một chỉ số đặc biệt. Chỉ mục đảo ngược thường được sử dụng trong công cụ tìm kiếm toàn văn. Sử dụng chỉ mục đảo ngược, chúng tôi có thể tìm ra vị trí của một từ trong tài liệu (hoặc bộ tài liệu) nhanh nhất có thể. Hãy nghĩ về giới hạn của bộ nhớ và cpu, chỉ số khác không thể hoàn thành công việc này.

Bạn có thể đọc tài liệu lucene để biết thêm chi tiết. Đó là một công cụ tìm kiếm mã nguồn mở. http://lucene.apache.org/java/docs/index.html


3

Thuật ngữ "Chỉ mục từ được đảo ngược" đề cập đến sự thay đổi mối quan hệ của một tài liệu đơn chứa nhiều từ, với mỗi từ duy nhất chứa (hoặc xác định) một danh sách nhiều tài liệu. Điều này đang thực hiện một cách hiệu quả Mối quan hệ một-nhiều (Tài liệu thành từ) và Đảo ngược (hoặc đảo ngược) nó sao cho một Mối quan hệ Một-nhiều "Đảo ngược" mới hiện tồn tại, là mỗi từ-duy nhất liên quan đến Nhiều- Tài liệu (tức là tất cả những gì có chứa từ đó). Nguồn gốc của nó thực sự rất đơn giản, và thuật ngữ "chỉ mục đảo ngược" đã được sử dụng để mô tả các chỉ mục thủ công cùng loại từ rất lâu trước khi máy tính và lập chỉ mục tốc độ cao điện tử thậm chí còn tồn tại (vâng, phải thừa nhận rằng tôi là một lập trình viên lão luyện, gần như đủ lớn để coi Grace Hopper là một "cô gái trẻ ngọt ngào" độ tuổi thích hợp để tán tỉnh trở lại khi COBOL là một ngôn ngữ mới sáng bóng). Vui lòng không loại bỏ chúng tôi vì chúng tôi thỉnh thoảng có thể cung cấp một hoặc hai tid-bit hữu ích và có thể có giá trị - khi RAM cá nhân của chúng tôi vẫn hoạt động. [cười toe toét]


2

trong các chỉ mục đảo ngược, chúng ta có dạng sau:

word1-> danh sách các tài liệu nó xuất hiện theo (thứ tự được sắp xếp)

word2-> danh sách các tài liệu nó xuất hiện theo (thứ tự được sắp xếp)

Nó rất hữu ích cho việc xử lý truy vấn của công cụ tìm kiếm vì nó cho phép chúng tôi tìm tài liệu mà từ xuất hiện trong đó.

Bạn có thể sử dụng tính năng rò rỉ máy được giám sát để xây dựng chỉ mục ngược này.


6
Điều đó nghe có vẻ giống như một chỉ mục đối với tôi, có gì đảo ngược về nó?
nghĩa hướng dẫn.

2
@guidoism Một chỉ số đảo ngược là sự đảo ngược của một chỉ số thuận. một chỉ mục chuyển tiếp lưu trữ một danh sách các từ cho mỗi tài liệu. Ví dụ: Doc-> w1, w2
Lập trình viên

Tôi vẫn không tìm thấy bất kỳ sự khác biệt nào giữa chỉ mục Chuyển tiếp và Đảo ngược (về cách hoạt động, hãy để lại bit đặt tên). Đối với tôi, cả hai đều giống như một chỉ mục ánh xạ một trường tới một loạt các id tài liệu. Đây là cách tôi hiểu cách oracle btree (hay còn gọi là chỉ mục chuyển tiếp) tổ chức dữ liệu. Tôi không thấy bất kỳ sự khác biệt nào đối với các nguyên tắc của chỉ mục đảo ngược. Lập bản đồ Tài liệu -> w1, w2, w3 có vẻ như là một đề xuất không hiệu quả đối với tôi về mặt tìm kiếm. Tự hỏi tại sao điều này ở vị trí đầu tiên? Điều đó khiến tôi trở lại hình vuông. :-).
user1189332

@Programmer Câu hỏi nhanh: Có thực tế để xóa các mục nhập khỏi tệp chỉ mục chuyển tiếp sau khi chỉ mục ngược được tạo từ nó không?
Roy Lee

0

Một điểm khác biệt nữa:

Xử lý các bản cập nhật với chỉ mục đảo ngược là tốn kém so với chỉ mục chuyển tiếp.

Chỉ mục chuyển tiếp xử lý các cập nhật dễ dàng bằng cách chỉ phản ánh các thay đổi trong chỉ mục tài liệu tương ứng, trong khi trong chỉ mục đảo ngược, cùng một thay đổi phải phản ánh ở nhiều vị trí trên chỉ mục được đảo ngược.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.