Quelle est la différence entre un index inversé et un index ancien?

99

En génie logiciel, nous créons des index tout le temps (par exemple, dans les bases de données) mais j'entends aussi beaucoup de gens parler d'indices inversés. Y a-t-il quelque chose de fondamentalement différent entre les deux? Ils ressemblent à la même chose.

guidisme
la source
Pour clarifier, vous demandez: qu'est-ce qui est différent d'un index normal ( en.wikipedia.org/wiki/Index_%28database%29 ) qui décompose une table basée sur des données qui existent déjà dans cette table? Est-ce exact?
jwheron
3
@guidoism Ce que tout le monde a omis de mentionner (bien que la normalité le décrit partiellement par des exemples et que l'amour soit à peu près sur le bouton), c'est que les index inversés "inversent" les données de base pour être plus efficaces (par exemple, permutez les clés / données pour rechercher dans une perspective différente ou ordre alphabétique / numérique pour permettre des algorithmes de recherche rapide), alors qu'un index standard stocke les données au fur et à mesure qu'il les trouve. Les références «arrière / avant» et la signification littérale du mot «inverser» ne s'appliquent pas ici, mais se réfèrent à l'inversion des données pour produire un format efficace spécifique à la tâche à accomplir.
TheManWithNoName

Réponses:

216

Une utilisation courante est "... pour permettre une recherche rapide en texte intégral".

Les deux types dénotent la directionnalité . L'un vous fait avancer dans l'index, et l'autre vous fait reculer (l'inverse) à travers l'index. C'est tout. Il n'y a pas de mystère à découvrir ici. Sinon, les deux types sont identiques, il s'agit simplement de savoir quelles informations vous avez , et par conséquent quelles informations vous essayez de trouver.

Pour répondre à votre demande, je ne pense pas qu'il y ait vraiment moyen de savoir pourquoi l'utilisation est ce qu'elle est aujourd'hui. La seule raison pour laquelle il est important de définir qui est forwardet lequel est, invertedc'est pour que nous puissions tous avoir une conversation à leur sujet, et que tout le monde sache de quelle direction nous parlons. Pensez aux termes «gauche» et «droite»: ils sont relatifs. Ce qui importe peu, sauf que tout le monde doit s'entendre sur celui qui est «à gauche» et celui qui est «juste» pour que les mots aient un sens. Si, en tant que culture, nous décidions de tourner à gauche et à droite, alors vous auriez le même problème à déterminer ce qu'est un «virage à droite» par rapport à un «virage à gauche» puisque le sens convenu avait changé. Cependant, la dénomination est arbitraire, sur le sens.

Dans votre commentaire où vous demandez «s'il vous plaît, ne définissez pas seulement les termes», vous manquez le point, et je pense que vous êtes simplement accroché au libellé alors qu'il n'y a absolument aucune différence entre eux.


Pour le bénéfice des futurs lecteurs, je vais maintenant fournir plusieurs exemples d'index «en avant» et «inversé»:

Exemple 1: recherche sur le Web

Si vous pensez que l'inverse d'un indice est quelque chose comme l' inverse d'une fonction en mathématiques , où l'inverse est une chose spéciale qui a une forme différente, alors vous vous trompez: ce n'est pas le cas ici.

Dans un moteur de recherche, vous avez une liste de documents (pages sur des sites Web), où vous entrez des mots clés et obtenez des résultats.

Un index avant (ou simplement un index) est la liste des documents et les mots qui y figurent. Dans l'exemple de recherche sur le Web, Google explore le Web, construit la liste des documents et identifie les mots qui apparaissent dans chaque page.

L' index inversé est la liste des mots et les documents dans lesquels ils apparaissent. Dans l'exemple de recherche sur le Web, vous fournissez la liste de mots (votre requête de recherche) et Google produit les documents (liens de résultats de recherche).

Ce sont tous les deux des indices - c'est juste une question de savoir dans quelle direction vous allez. Transférer est de documents-> à-> mots, inversé est de mots-> à-> documents.

Exemple 2: DNS

Un autre exemple est une recherche DNS (qui prend un nom d'hôte et renvoie une adresse IP) et une recherche inversée (qui prend une adresse IP et vous donne le nom d'hôte).

Exemple 3: un livre

L'index au dos d'un livre est en fait un index inversé , tel que défini par les exemples ci-dessus - une liste de mots, et où les trouver dans le livre. Dans un livre, la table des matières est comme un index avancé : c'est une liste de documents (chapitres) que contient le livre, sauf qu'au lieu de lister les mots de ces sections, la table des matières donne juste un nom / une description générale de ce qui contenus dans ces documents (chapitres).

Exemple 4: votre téléphone portable

L' index de transfert de votre téléphone portable est votre liste de contacts et les numéros de téléphone (portable, domicile, travail) associés à ces contacts. L' index inversé est ce qui vous permet de saisir manuellement un numéro de téléphone, et lorsque vous appuyez sur "composer", vous voyez le nom de la personne, plutôt que le numéro, car votre téléphone a pris le numéro de téléphone et vous a trouvé le contact qui lui est associé.

Jefflunt
la source
11
Merci pour votre temps. mais votre réponse n'est toujours pas informative. Comme je l'ai mentionné dans ma demande de prime, je comprends ce que signifient les termes impliqués et pourquoi ils surviennent. Ma question était: "Pourquoi les personnes qui ont nommé les index inversés les appellent-ils inversés alors que nous avons une longue tradition qui les appelle simplement des index simples? Par exemple, les index à la fin des livres, comme vous le faites remarquer, sont en fait inversés. par perspective historique, les index à la fin des livres sont venus avant les index web. Alors pourquoi inverser la tradition? ". Je suppose que ce n'est qu'une de ces choses qui vient de se passer ...
Manav
1
« Je ne pense pas qu'il soit possible de savoir pourquoi , sans procéder à un examen historique de l'utilisation des termes » - j'aurais quelqu'un espéré serait procéder à un tel examen historique et donner une réponse. :-) Parce que cela étant opposé à la signification courante du langage «index» est surprenant. (Une réponse possible est que lorsque l'expression «index inversé» a été pensée pour la première fois, l'expression «index» était déjà pour un «index» inversé par rapport à «index inversé», c'est-à-dire inversé par rapport au sens réel de «index ". Dans ce cas, il serait utile de savoir pourquoi" l'index "avant a obtenu le nom étrange.)
ShreevatsaR
2
@jefflunt se demandant simplement pourquoi l'indexation directe devrait être utilisée. Je parle en particulier de l'exemple de recherche sur le Web ici. Donc, si google, dans le cadre de l'indexation directe, fait la liste des documents <-> mots qu'ils contiennent , et utilise finalement la liste des mots <-> liste des documents dans leur recherche, pourquoi la liste des documents <-> mots dans eux ? En d'autres termes, ma question est la suivante: on ne peut pas demander à Google quels mots se trouvent dans une page (document) particulière ou on va principalement demander où se trouvent les mots-clés qu'il recherche dans les pages. Alors pourquoi faire une indexation avant?
quickbrownfox
1
Donc, dans le contexte de la base de données relationnelle, il n'y a pas d'index inversé? ou ces index sont en fait des «index inversés». Les problèmes avec les termes «agréables» dans la littérature sont l'ignorance / l'erreur / la délibération de quelques pionniers ou corps qui commencent un accord différent et une partie de la communauté suit cette nomenclature. Tout le monde est confus après un certain temps. Je suis sûr qu'il existe de nombreux termes dans les logiciels qui étaient à l'origine censés être, disons A, mais une communauté différente le prend délibérément ou à tort comme A 'ou B, syntaxiquement hors de propos. Cela confond encore l'enfer des nouveaux apprenants.
nir
1
@Roylee - Je n'ai pas lu ce livre blanc. Je pense que ce que vous demandez est: "Mettez-vous à jour l'index inversé lors de la mise à jour de l'index avant?" Si c'est votre question, alors la réponse est oui.
jefflunt
26

Ils l'ont appelé inversé simplement parce qu'il existe déjà un index avancé. Prenons l'exemple du moteur de recherche, il se compose de deux parties: la première partie est "web crawler and parser" qui construit un index de document en mot, la seconde partie est une base de données de recherche qui construit un index de mot en document. Du fait que le premier index existe, nous appelons naturellement le second index comme un index inversé.

Si vous nommez la table des matières (table des matières) d'un livre comme index, alors vous devez appeler l'index à la fin du livre comme "index inversé". Ou, de l'autre côté, vous pouvez appeler la table des matières en tant qu'index inversé.

xéranique
la source
6
Cela devrait être la réponse acceptée car elle répond à la question de savoir pourquoi nous appelons un index «inversé» même si c'est exactement ce que tout le monde pense d'un «index normal». Un index SQL b-tree stocke pour chaque mot un pointeur vers toutes les lignes ("documents") le contenant. Là, nous l'appelons "index". Mais dans les moteurs de recherche, nous appelons soudainement cette même procédure «index inversé». Non pas parce que c'est fondamentalement différent, mais parce que nous avons d'abord créé un «index avant» (texte divisé), puis «inversé». Donc, dans l'ensemble, le nom «inverse» vient du processus de création, pas de la structure finale de l'indice.
Foo Bar le
@xeranic merci pour les idées. Question rapide: est-il pratique de supprimer des entrées du fichier d'index avant après la création d'un index inversé?
Roy Lee
3
Je suis d'accord avec @FooBar. Cette réponse doit être choisie comme la bonne réponse. Il a répondu pourquoi nous inventons un nouveau terme inverted index même si tous les index normaux de notre vie sont déjà utilisés comme inverted.
Ryan Lyu
7

typiquement lorsque vous parlez d'index, vous voulez dire des calculs ajoutés ou des résultats stockés de procédures qui ont été effectuées afin d'accélérer l'application (par exemple MySQL ou autre SGBDR Consultez MySQL la documentation ). L'indexation peut également être liée à la mise en cache, etc.

L'index inversé crée un fichier dont la structure est principalement destinée à la recherche (texte intégral).

L'index inversé se compose de deux fichiers principaux:

  • Vocabulaire
  • Occurences

Dans le vocabulaire, il y a des mots communs extraits du texte (bien sûr après avoir filtré les mots de la liste noire comme les pronoms). Le fichier des occurrences contient la connexion entre les mots et les documents (mot1 apparaît dans doc1 et doc2, pas dans doc3). Il est représenté sous la forme d'une matrice.

Processus d'indexation - index inversé

Dans l'image ci-dessus est montré le processus de création des deux fichiers mentionnés.

Si vous êtes davantage intéressé par cette problématique, je peux vous recommander un excellent livre écrit par Ricardo Yated - Modern Information Retrieval ( voir sur Amazon ) - à propos de la page 200 je pense.

J'espère que ça aide :-)

Bery
la source
C'est une très bonne réponse car elle explique ce qu'est réellement un index inversé. Il dépasse l'idée de l'indexation directe et de l'indexation inverse qui est différente de l'algorithme utilisé pour une capacité de recherche activée en créant et en inversant l'index.
AN6U5
6

la normalité a déjà merveilleusement différencié un index avant et un index inversé, mais pour la question de savoir pourquoi l'un est appelé un index direct et l'autre un index inversé, c'est peut-être pourquoi ils sont appelés ainsi ---

Prenant l'exemple de l'exploration et de l'indexation des moteurs de recherche (ou de la création d'un index pour un livre), un index avant peut être créé simultanément pendant que vous explorez les pages Web (ou lisez le livre) ou que vous avancez . Donc, si vous avez 10 pages Web à explorer (ou 10 chapitres dans un livre), vous pouvez explorer la première page Web (lire le premier chapitre) et ensuite faire une liste de mots qui apparaissent dans la page Web (mots qui apparaissent dans le chapitre) et continuer ce processus pour les autres pages Web (autres chapitres) donc au moment où vous avez parcouru les 10 pages Web (lisez les 10 chapitres) votre index de transfert est complet avec chaque page Web (chapitre) pointant vers une liste de mots qu'il contient .

Mais pour créer un index inversé, vous devez explorer toutes les 10 pages Web (lisez les 10 chapitres), puis prendre chaque mot de chaque liste de documents et déterminer quels documents contiennent ce mot. C'est comme revenir en arrière une fois que vous avez parcouru les pages Web (lisez les chapitres du livre) . C'est ce qu'on appelle un index inversé.

Ce n'est que ma spéculation.

amour
la source
5

Il existe de nombreux types d'index. Par exemple, B-tree, R-tree, hash ... Pour des raisons différentes, nous devons choisir le bon index.

L'index inversé est spécial. Index inversé généralement utilisé dans le moteur de recherche en texte intégral. Utilisez l'index inversé, nous pouvons trouver un mot dans un document (ou un ensemble de documents) aussi rapidement que possible. Pensez à la limite de mémoire et de processeur, les autres index ne peuvent pas terminer ce travail.

Vous pouvez lire le document lucene pour plus de détails. C'est un moteur de recherche open source. http://lucene.apache.org/java/docs/index.html

virushuo
la source
3

Le terme «index de mots inversés» fait référence au changement de relation d'un document unique contenant de nombreux mots, à chaque mot unique contenant (ou identifiant) une liste de plusieurs documents. Il s'agit effectivement de prendre une relation un-à-plusieurs (Docs to Words) et de l'inverser (ou de l'inverser) de telle sorte qu'une nouvelle relation un-à-plusieurs «inversée» existe maintenant, qui est chaque mot unique relatif à plusieurs- Documents (c'est-à-dire tout ce qui contient ce mot). Son origine est vraiment aussi simple que cela, et le terme «index inversé» a été utilisé pour décrire les index manuels du même type bien avant que les ordinateurs et l'indexation électronique à grande vitesse n'existent (oui, certes, je suis un vieux programmeur geezer, presque assez vieux pour avoir considéré Grace Hopper comme une "douce jeune femme" l'âge approprié pour faire la cour quand COBOL était une nouvelle langue brillante). S'il vous plaît, ne nous débarrassez pas encore de nous, geezers, car nous pouvons parfois fournir une information historique utile, et peut-être même précieuse, ou deux - lorsque notre RAM personnelle fonctionne encore. [sourire]

user1009
la source
2

dans les index inversés, nous avons la forme suivante:

mot1-> liste des documents dans lesquels il se produit (ordre trié)

word2-> liste des documents dans lesquels il se produit (ordre trié)

Il est très utile pour le traitement des requêtes des moteurs de recherche car il nous permet de trouver des documents dans lesquels le mot apparaît.

Vous pouvez utiliser l'apprentissage automatique supervisé pour créer cet index inversé.

Programmeur
la source
6
Cela me semble un indice, qu'est-ce qui est inversé?
guidoism
2
@guidoism Un index inversé est l'inversion d'un index direct. un index avant stocke une liste de mots pour chaque document. Par exemple, Doc-> w1, w2
Programmeur
Je ne trouve toujours aucune différence entre l'index Forward et Inverted (en termes de fonctionnement, laissez le bit de dénomination). Pour moi, cela ressemble à un index qui mappe un champ à un tas d'identifiants de document. C'est ainsi que j'ai compris comment l'oracle btree (autrement appelé index avancé) organise les données. Je ne vois aucune différence avec les principes de l'indice inversé. Mapper un document -> w1, w2, w3 me semble une proposition inefficace en termes de recherche. Je me demande pourquoi est-ce en premier lieu? Cela me ramène à la case départ. :-).
user1189332
@Programmer Question rapide: est-il pratique de supprimer les entrées du fichier d'index avant après la création d'un index inversé?
Roy Lee
0

Encore une différence:

La gestion des mises à jour avec l'index inversé est coûteuse par rapport à l'index forward.

L'index avancé gère facilement les mises à jour en reflétant les modifications uniquement dans l'index de document correspondant, tandis que dans l'index inversé, le même changement doit se refléter dans plusieurs positions dans l'index inversé.

Siva Kumar
la source