Яка різниця між перевернутим індексом та простим старим індексом?


99

В інженерії програмного забезпечення ми постійно створюємо індекси (наприклад, в базах даних), але я також чую, як багато людей говорять про перевернуті індекси. Чи є між ними щось принципово різне? Вони звучать як одне і те ж.



Для уточнення ви запитуєте: чим відрізняється звичайний індекс ( en.wikipedia.org/wiki/Index_%28database%29 ), який розбиває таблицю на основі даних, які вже є в цій таблиці? Це правильно?
jwheron

3
@guidoism Те, про що всі не згадали (хоча Normolocity частково описує це на прикладах, а Loves значною мірою знаходиться на кнопці), це те, що перевернуті індекси "інвертують" основні дані, щоб бути більш ефективними (наприклад, поміняти місцями ключі / дані для пошуку з іншої точки зору або впорядкування в алфавітно-цифровому порядку, щоб дозволити алгоритми швидкого пошуку), тоді як стандартний індекс зберігає дані у міру знаходження. Посилання "назад / вперед" та буквальне значення слова "інвертувати" тут не застосовуються, натомість це стосується інверсії даних для створення ефективного формату, специфічного для заданої задачі.
TheManWithNoName

Відповіді:


216

Одним із загальноприйнятих методів є "..., щоб дозволити швидкий повнотекстовий пошук".

Два типи позначають спрямованість . Один веде вас вперед через індекс, а інший - назад (через індекс) через індекс. Це воно. Тут немає жодної таємниці, яку можна розкрити. В іншому випадку два типи однакові, це лише питання про те, якою інформацією ви володієте , і як результат, яку інформацію ви намагаєтеся знайти.

Щоб вирішити ваш запит, я не думаю, що насправді існує спосіб дізнатись, чому використання є таким, яке є сьогодні. Єдина причина, через яку важливо визначити, яке саме значення.forward а яка - invertedце те, щоб ми всі могли про них поговорити, і всі знають, про який напрям ми говоримо. Подумайте про терміни "ліворуч" і "праворуч": вони відносні. Що є, що не має значення, за винятком того, що всі мають домовитись, який з них "лівий", а який - "правильний", щоб слова мали значення. Якщо ми, як культура, вирішили перевернути ліворуч і праворуч, тоді у вас виникне те саме питання, що з'ясовувати, що таке "правий поворот" проти "лівий поворот", оскільки змінений узгоджений сенс змінився. Однак найменування є довільним,

У вашому коментарі, де ви запитуєте, "будь ласка, не просто визначайте терміни", ви пропускаєте суть, і я думаю, що ви просто зациклюєтесь на формулюванні, коли між ними абсолютно немає різниці.


На користь майбутніх читачів я зараз наведу кілька прикладів "вперед" та "перевернуто":

Приклад 1: Інтернет-пошук

Якщо ви думаєте, що інверсія індексу - це щось на зразок зворотної функції в математиці , де інверсія - це особлива річ, яка має іншу форму, то ви помиляєтесь: це не так.

У пошуковій системі у вас є список документів (сторінок на веб-сайтах), де ви вводите деякі ключові слова і отримуєте результати назад.

Уперед індекс (або просто індекс) є список документів , і які слова з'являються в них. У прикладі веб-пошуку Google сканує Інтернет, будуючи список документів, з'ясовуючи, які слова відображаються на кожній сторінці.

Інвертований індекс є список слів , а також документи , в яких вони з'являються. У прикладі пошуку в Інтернеті ви надаєте список слів (пошуковий запит), а Google створює документи (посилання на результати пошуку).

Вони обидва індексу - це лише питання, в якому напрямку ви їдете. Вперед - від документів-> до-> слів, перевернутий - від слів-> до-> документів.

Приклад 2: DNS

Іншим прикладом є пошук у DNS (який приймає ім'я хоста та повертає IP-адресу) та зворотний пошук (який приймає IP-адресу та дає вам ім'я хосту).

Приклад 3: Книга

Індекс на звороті книги насправді є перевернутим покажчиком , як визначено на прикладах вище - переліком слів і де їх можна знайти в книзі. У книзі зміст подібний до прямого індексу : це перелік документів (розділів), які книга містить, за винятком того, що замість перелічення слів у цих розділах, зміст просто дає назву / загальний опис того, що містяться в цих документах (главах).

Приклад 4: Ваш мобільний телефон

Індекс переадресації у вашому мобільному телефоні - це ваш список контактів і те, які номери телефонів (стільниковий, домашній, робочий) пов'язані з цими контактами. Інвертований індекс є те , що дозволяє вручну ввести номер телефону, і коли ви натиснете «набрати» ви побачите ім'я людини, а не кількість, тому що ваш телефон взяв номер телефону і знайшов вас контакт , пов'язаний з ним.


11
спасибі за ваш час. але ваша відповідь все ще малоінформативна. Як я вже згадував у своєму запиті на винагороду, я розумію, що означають терміни та чому вони виникають. Моє запитання було: "чому люди, які називали перевернуті індекси, називали їх інвертованими, коли ми маємо давню традицію, яка називає їх просто звичайними індексами? Наприклад, індекси в кінці книг, як ви зазначаєте, насправді інвертовані. з історичної точки зору індекси наприкінці книг виходили перед веб-покажчиками. Тоді навіщо інвертувати традицію? ". Я здогадуюсь, що це була лише одна з тих речей, що щойно сталися ...
Манав

1
«Я не думаю , що це можна зрозуміти , чому без проведення історичного розгляду використання термінів» - я б сподівався , хто - то буде проводити таку історичну експертизу і дати відповідь. :-) Тому що це протилежне загальномовному значенню "індекс" дивно. (Однією з можливих відповідей є те, що коли словосполучення "інвертований індекс" було вперше задумано, фраза "індекс" вже була для деякого "індексу" інвертованим wrt "інвертованим індексом", тобто інвертоване wrt реальне значення "індексу" ". У цьому випадку було б корисно знати, чому прямий" індекс "отримав дивну назву.)
ShreevatsaR

2
@jefflunt просто дивується, чому слід використовувати пряме індексування. Я тут особливо говорю про приклад пошуку в Інтернеті. Отже, якщо Google, як частина переадресації, робить список документів <-> словами в них і в кінцевому підсумку використовує список слів <-> список документів у своєму пошуку, чому список документів <-> слів у їх ? Іншими словами, моє запитання: Не можна запитати в Google, які слова є на певній сторінці (документі), або в основному збирається запитати, де на сторінках трапляються ключові слова, які він / вона шукає. Тоді навіщо робити індексацію вперед?
quickbrownfox

1
Так що в контексті реляційної бази даних немає перевернутого індексу? або ці індекси насправді є "перевернутим індексом". Проблеми з "приємними" термінами в літературі - це незнання / помилка / роздуми кількох піонерів чи корпусів, які починають іншу згоду, а частина громади дотримується цієї номенклатури. Усі колись плутаються. Я впевнений, що в програмному забезпеченні є багато термінів, які спочатку мали бути, скажімо, A, але інша спільнота навмисно або помилково сприймає їх як A 'або B, синтаксично не звичайно. Це все ще бентежить нового учня.
нір,

1
@Roylee - я не читав цього білого паперу. Я думаю, що ви запитуєте: "Чи оновлюєте ви інвертований індекс під час оновлення прямого індексу?" Якщо це ваше питання, то відповідь - так.
jefflunt

26

Вони назвали це перевернутим лише тому, що вже є індекс вперед. Візьмемо приклад пошукової системи, яка складається з двох частин: перша частина - це «веб-сканер та синтаксичний аналізатор», які будують індекс від документа до слова, друга частина - це база даних, яка створює індекс від слова до документа. Оскільки перший індекс існує, ми, природно, називаємо другий індекс перевернутим індексом.

Якщо ви називаєте TOC (Зміст) книги як індекс, то слід назвати індекс в кінці книги "перевернутим індексом". Або, з іншого боку, ви можете викликати TOC як інвертований індекс.


6
Це повинна бути прийнята відповідь, оскільки вона відповідає на питання, чому ми називаємо індекс "перевернутим", навіть якщо це саме те, що всі думають про "нормальний індекс". Індекс b-дерева SQL зберігає для кожного слова вказівник на всі рядки ("документи"), що містять його. Там ми називаємо це "індекс". Але в пошукових системах ми раптом називаємо цю ж процедуру "перевернутим індексом". Не тому, що це принципово інше, а тому, що ми спершу створили "індекс вперед" (розділений текст), а потім "обернули" його. Отже, загалом назва "обернена" походить від процесу її створення, а не від кінцевої структури індексу.
Foo Bar

@xeranic дякую за ідею. Швидке запитання: Чи практично видаляти записи з прямого файлу індексу після побудови з нього перевернутого індексу?
Рой Лі,

3
Я згоден з @FooBar. Цю відповідь слід вибрати правильною. Це відповіло, чому ми вигадуємо новий термін, inverted index хоча всі нормальні показники в нашому житті вже використовуються як inverted.
Райан Лю

7

як правило, говорячи про індекс, ви маєте на увазі деякі додані обчислення або збережені результати процедур, які були зроблені з метою пришвидшення роботи програми (наприклад, MySQL або інша СУБД. Зверніться до MySQL у документи ). Індексація також може бути пов’язана з кешуванням тощо.

Інвертований індекс створює файл зі структурою, яка є головним чином цільовою для пошуку (повного тексту).

Інверсований індекс складається з двох основних файлів:

  • Лексика
  • Події

У словниковому запасі є загальновживані слова, витягнуті з тексту (звичайно, після фільтрування чорного списку слів, таких як займенники). Файл повторень містить зв'язок між словами та документами (слово1 відображається в doc1 та doc2, а не в doc3). Він представлений у формі матриці.

Процес індексації - інвертований індекс

На зображенні вище показано процес створення двох згаданих файлів.

Якщо вас більше цікавить ця проблема, я можу порадити вам чудову книгу, написану Рікардо Ятедом - Сучасний пошук інформації ( див. Її на Amazon ) - приблизно на сторінці 200.

Сподіваюся, це допоможе :-)


Це дуже гарна відповідь, оскільки вона пояснює, що насправді є перевернутим індексом. Це переживає ідею прямого індексування та зворотного індексування, яке відрізняється від алгоритму, який використовується для можливості пошуку, яка увімкнена шляхом створення та інверсованого індексу.
AN6U5,

6

normalocity вже чудово розрізнив прямий та перевернутий індекс, але для питання, чому один називається прямим індексом, а інший інвертованим індексом, можливо, саме тому вони називаються саме так ---

На прикладі сканування та індексування пошукової машини (або побудови індексу для книги), індекс прямої передачі можна створити одночасно, коли ви скануєте веб-сторінки (або читаєте книгу) або рухаєтеся вперед . Отже, якщо у вас є 10 веб-сторінок для сканування (або 10 глав у книзі), ви можете просканувати першу веб-сторінку (прочитати перший розділ), а потім скласти список слів, що з’являються на веб-сторінці (слова, що з’являються в главі), і продовжити цей процес для інших веб-сторінок (інших розділів), тому до того часу, коли ви просканували всі 10 веб-сторінок (прочитайте всі 10 розділів), ваш індекс вперед завершується кожною веб-сторінкою (главою), що вказує на список слів, який вона містить .

Але щоб зробити інвертований індекс, вам потрібно просканувати всі 10 веб-сторінок (прочитати 10 глав), а потім взяти кожне слово з кожного списку документів і з’ясувати, які документи містять це слово. Отже, це як повернутися назад, коли ви перескакуєте веб-сторінки (читайте глави книги) . Тому його називають перевернутим індексом.

Це лише моя міркування.


5

Існує багато типів індексу. Наприклад, B-дерево, R-дерево, хеш ... Для різних цілей ми повинні вибрати правильний індекс.

Інвертований індекс - спеціальний. Інвертований індекс, який зазвичай використовується в повнотекстовій пошуковій системі. Використовуючи інверсований індекс, ми можемо дізнатись про місцезнаходження слова в документі (або наборі документів) якомога швидше. Подумайте про обмеження пам’яті та процесора, інший індекс не може закінчити цю роботу.

Ви можете прочитати люценовий документ, щоб дізнатися більше. Це пошукова система з відкритим кодом. http://lucene.apache.org/java/docs/index.html


3

Термін "Інвертований індекс слів" означає зміну співвідношення одного документа, що містить багато слів, до кожного унікального слова, що містить (або ідентифікує) перелік багатьох документів. Це фактично бере взаємозв'язок "один-до-багатьох" ("Документи до слів") і перевертає (або перевертає) його таким чином, що тепер існує нова "інвертована" зв'язок "один-до-багатьох", кожна з яких є унікальним словом, що стосується багатьох Документи (тобто всі, що містять це слово). Його походження насправді настільки просто, і термін "перевернутий індекс" використовувався для опису однотипних покажчиків задовго до того, як навіть існували комп'ютери та електронна високошвидкісна індексація (так, правда, я старий програміст, майже досить старий, щоб вважати Грейс Хоппер "милою панночкою" вік, відповідний для залицяння, коли COBOL був новою блискучою мовою). Будь ласка, не відкидайте нас гезерами поки що, оскільки ми можемо час від часу надавати корисний, а можливо, навіть цінний історичний порядок чи два - коли наша особиста ОЗУ все ще працює, тобто. [усміхається]


2

у інвертованих індексах ми маємо таку форму:

word1-> список документів, у яких воно відбувається (впорядковано)

word2-> перелік документів, в яких він зустрічається (відсортовано)

Це дуже корисно для обробки запитів пошукової системи, оскільки дозволяє знайти документи, у яких відбувається слово.

Ви можете використовувати контрольоване машинне навчання для побудови цього перевернутого індексу.


6
Це звучить як індекс для мене, що в ньому перевернуто?
настанов

2
@guidoism Перевернутий індекс - це інверсія прямого індексу. індекс вперед зберігає список слів для кожного документа. Наприклад, Doc-> w1, w2
Програміст

Я все ще не знаходжу ніякої різниці між переадресованим та перевернутим індексом (щодо того, як це працює, залиште біт іменування). Для мене це виглядає як індекс, який відображає поле в купу ідентифікаторів документів. Ось як я зрозумів, як oracle btree (інакше званий прямим індексом) організовує дані. Я не бачу ніякої різниці до принципів перевернутого індексу. Складання документа -> w1, w2, w3 мені здається неефективною пропозицією з точки зору пошуку. Цікаво, чому це в першу чергу? Це повертає мене до прямої. :-).
user1189332

@Programmer Швидке запитання: чи практично видаляти записи з прямого файлу індексу після побудови з нього перевернутого індексу?
Рой Лі,

0

Ще одна різниця:

Поводження з оновленнями з інвертованим індексом коштує дорого порівняно з індексом прямого напрямку.

Індекс вперед обробляє оновлення легко, відображаючи зміни лише у відповідному індексі документа, тоді як в інвертованому індексі одна і та ж зміна повинна відображатися в декількох позиціях в інвертованому індексі.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.