転置インデックスと普通のインデックスの違いは何ですか?


98

ソフトウェアエンジニアリングでは、常にインデックスを作成します(たとえば、データベースで)が、逆インデックスについて多くの人々が話していることも耳にします。2つの間に根本的に異なるものはありますか?彼らは同じことのように聞こえます。



明確にするために、あなたは尋ねています:通常のインデックス(en.wikipedia.org/wiki/Index_%28database%29)は、テーブルに既に存在するデータに基づいてテーブルを分解するのと何が違うのですか?あれは正しいですか?
jwheron

3
@guidoism誰もが言及しなかったのは(正常性が例によってそれを部分的に説明し、loveshはボタンにかなりあるが)逆索引は基本データをより効率的に「逆転」することです(たとえば、異なる視点から検索するためにキー/データを交換するか、高速検索アルゴリズムを可能にするためにアルファベット順/数値順))、標準インデックスはデータを見つけたときに格納します。「後方/前方」参照および「反転」という単語の文字どおりの意味はここでは適用されません。代わりに、データの反転を参照して、当面のタスクに固有の効率的なフォーマットを生成します。
TheManWithNoName

回答:


215

一般的な用途の1つは、「...全文検索を高速に行うため」です。

2つのタイプは方向性を示します。1つはインデックスを順方向に移動し、もう1つはインデックスを逆方向(逆)に移動します。それでおしまい。ここで明らかにする謎はありません。それ以外の場合、2つのタイプは同じです。それは、どのような情報を持っているか、その結果、どの情報を見つけようとしているのかという問題です

お問い合わせに対応するために、なぜ現在の使用方法であるのかを知る方法は実際にはないと思います。forwardどちらであるか、どちらが意味であるかを定義することが重要である唯一の理由。invertedは、私たち全員がそれらについて会話できるようにするためであり、誰もが私たちが話している方向を知っています。「左」と「右」という用語について考えてください。これらは相対的なものです。これは問題ではありませんが、単語が意味を持つためには、誰が「左」と「右」のどちらであるかを全員が同意する必要があります。文化として、左と右をめくることにした場合、合意された意味が変わったため、「右折」と「左折」が何であるかを理解するのと同じ問題が発生します。ただし、命名は任意です。

「用語だけを定義しないでください」という質問のコメントでは、要点が欠けているので、両者の間にまったく違いがない場合は、言い回しにこだわっているだけだと思います。


将来の読者のために、「前方」および「逆」のインデックスの例をいくつか示します。

例1:ウェブ検索

インデックスの逆が数学の関数逆のようなものであり、逆が異なる形式の特別なものであると考えている場合、あなたは間違っています:ここではそうではありません。

検索エンジンには、ドキュメント(Webサイトのページ)のリストがあり、キーワードを入力して結果を取得します。

前方のインデックス(または単にインデックス)がある文書のリスト、およびその言葉は彼らに表示されます。ウェブ検索の例では、Googleはウェブをクロールしてドキュメントのリストを作成し、各ページにどの単語が表示されているかを調べます。

転置インデックスは、ある単語のリスト、およびそれらが現れるドキュメント。Web検索の例では、単語のリスト(検索クエリ)を指定すると、Googleがドキュメント(検索結果リンク)を生成します。

どちらもインデックスです。これは、どちらの方向に進むかという問題にすぎません。順方向はドキュメントから->->ワード、逆方向はワードから->->ドキュメントです。

例2:DNS

別の例は、DNSルックアップ(ホスト名を取得してIPアドレスを返す)と逆ルックアップ(IPアドレスを取得してホスト名を取得する)です。

例3:本

本の裏のインデックスは、実際には上記の例で定義されている逆さのインデックスです-単語のリストと本のどこにあるか。本では、目次は前方索引のようなものです。これは、本に含まれているドキュメント(章)のリストです。ただし、これらのセクションに単語をリストするのではなく、目次は、これらのドキュメント(章)に含まれています。

例4:携帯電話

携帯電話の前方インデックスは、連絡先のリストと、それらの連絡先に関連付けられている電話番号(携帯、自宅、職場)です。逆索引は、手動で電話番号を入力することができますものです、そしてあなたが打ったとき、あなたの携帯電話は、電話番号をとっているので、あなたはかなりの数よりも、その人の名前を参照してください「ダイヤル」とあなたにそれに関連付けられている連絡先を見つけました。


11
お時間をいただきありがとうございます。しかし、あなたの答えはまだ有益ではありません。バウンティリクエストで述べたように、関連する用語の意味とその理由を理解しています。私の質問は次のとおりです。「私たちが長い間、単純な索引と呼ぶ伝統があるのに、逆索引に名前を付けた人々が逆索引と呼んだのはなぜですか?たとえば、本の最後にある索引は、実際には逆になっています。歴史的観点から見ると、本の巻末の索引はWeb索引の前にあります。では、なぜ伝統を逆転させるのですか?」私の推測では、これは起こったばかりのことの1つにすぎなかったと思います...
Manav

1
「用語の使用の歴史的調査を行わずに理由を知ることは不可能だと思う」-私は誰かそのような歴史的調査を行って答えを出してくれることを望んでいた。:-)これは、「インデックス」の一般的な言語の意味と反対であるため、驚くべきことです。(考えられる答えの1つは、「逆インデックス」というフレーズが最初に考えられたとき、「インデックス」というフレーズは、「インデックス」の「逆インデックス」に対してすでに反転していた、つまり、「インデックス」の実際の意味に対して逆転したことです。 「その場合、なぜフォワード "インデックス"が奇妙な名前になったのかを知ることは有用でしょう。)
ShreevatsaR

2
@jeffluntは、なぜフォワードインデックスを使用する必要があるのか​​疑問に思っています。ここでは特にウェブ検索の例について話しています。したがって、グーグルの場合、フォワードインデックス作成の一部として、ドキュメントリスト<->単語を検索し、最終的に単語リスト<->ドキュメントのリストを検索に使用するのに、なぜドキュメントリスト<->単語をそれら?言い換えると、私の質問は次のとおりです。特定のページ(ドキュメント)にある単語をGoogleに尋ねることはできません。または、主に、探しているキーワードがページのどこにあるのかを尋ねます。では、なぜ順方向索引付けを行うのですか?
quickbrownfox

1
では、リレーショナルデータベースのコンテキストでは、逆索引はありませんか?または、それらのインデックスは実際には「逆インデックス」です。文学の「同意できる」用語の問題は、異なる同意を始め、コミュニティの一部がその命名法に従っている少数の開拓者や軍団による無知/間違い/熟考です。しばらくすると誰もが混乱します。ソフトウェアには元々Aと言うことを意図していた多くの用語があると思いますが、異なるコミュニティが意図的にまたは誤ってそれをA 'またはBと解釈し、構文的にコースから外れます。それはまだ新しい学習者の地獄を混乱させます。
2016年

1
@Roylee-私はその白書を読んだことがありません。「フォワードインデックスを更新するときに逆インデックスを更新しますか?」それがあなたの質問であれば、答えはイエスです。
jefflunt

26

彼らはすでにフォワードインデックスがあるからといってそれを逆にしたと呼びました。検索エンジンの例を見てみましょう。2つの部分で構成されています。最初の部分は「ウェブクローラーとパーサー」で、ドキュメントから単語へのインデックスを作成します。2番目の部分は検索データベースで、単語からドキュメントへのインデックスを作成します。最初のインデックスが存在するため、自然に2番目のインデックスを反転インデックスと呼びます。

書籍の目次(目次)をインデックスとして指定する場合、書籍の最後にあるインデックスを「逆索引」と呼ぶ必要があります。または、反対側では、目次を逆索引として呼び出すことができます。


6
これは、誰もが「通常のインデックス」と思っているのに、なぜインデックスを「反転」と呼ぶのかという質問に答えるため、受け入れられる答えになるはずです。SQL bツリーインデックスは、単語ごとに、それを含むすべての行(「ドキュメント」)へのポインタを格納します。そこで「インデックス」と呼んでいます。しかし、検索エンジンでは、このまったく同じ手順を突然「逆索引」と呼びます。それは根本的に異なるからではなく、最初に「フォワードインデックス」(スプリットテキスト)を作成し、次にそれを「インバース」するためです。つまり、全体として、「逆」という名前は、インデックスの最終的な構造からではなく、それを作成するプロセスに由来しています。
Foo Bar

@xeranicの洞察に感謝します。簡単な質問:逆インデックスが作成された後、順インデックスファイルからエントリを削除することは現実的ですか?
ロイ・リー

3
@FooBarに同意します。この答えは正しい答えとして選ばれるべきです。それはinverted index 、私たちの人生のすべての通常のインデックスがすでにとして使用されているにもかかわらず、なぜ新しい用語を発明したのかと答えましたinverted
Ryan Lyu

7

通常、インデックスについて話すときは、アプリケーションを高速化するために実行された追加の計算または保存された手順の結果を意味します(例:MySQLまたは他のRDBMS MySQLのドキュメントを参照)参照)。インデックス作成は、キャッシングなどにも関連しています。

逆索引は、主に(フルテキスト)検索を目的とした構造を持つファイルを作成します。

逆索引は、2つのメインファイルで構成されています。

  • 単語
  • 発生

語彙には、テキストから抽出された一般的な単語があります(もちろん、代名詞のようなブラックリストの単語をフィルタリングした後)。オカレンスファイルは、単語とドキュメント間の関係を保持します(word1は、doc3ではなくdoc1とdoc2に表示されます)。マトリックスの形で表されます。

インデックス作成プロセス-転置インデックス

上の画像は、上記の2つのファイルを作成するプロセスを示しています。

この問題にさらに興味がある場合は、Ricardo Yated-Modern Information Retrieval(Amazonで参照)が書いた素晴らしい本をお勧めします。)-約200ページだと思います。

それが役に立てば幸い :-)


これは、転置インデックスが実際に何であるかを説明するので、非常に良い答えです。これは、インデックスの作成と反転によって有効になる検索機能に使用されるアルゴリズムとは異なる、順方向のインデックス付けと逆方向のインデックス付けのアイデアを通過します。
AN6U5 2017年

6

正常性はすでに見事に差別化されています順方向インデックスと逆方向インデックスの間でれますが、なぜ1方向インデックスと呼ばれ、もう1つが逆方向インデックスと呼ばれるのかという問題については、おそらくこのように呼ばれます---

検索エンジンのクロールとインデックス作成(または本のインデックスの作成)を例にとると、Webページをクロール(または本を読んで)しているとき、または先に進んでいるときに、フォワードインデックスを同時に作成できます。したがって、クロールする10のWebページ(または本の10の章)がある場合、最初のWebページ(最初の章を読む)をクロールし、Webページに表示される単語(章に表示される単語)のリストを作成して続行できます。他のWebページ(他の章)に対するこのプロセスなので、10のWebページすべて(10の章すべてを読む)をクロールするまでに、フォワードインデックスは、含まれる単語のリストを指す各Webページ(章)で完了します。

ただし、転置インデックスを作成するには、10のWebページ(10の章を読む)をすべてクロールし、各ドキュメントリストから各単語を取得して、その単語を含むドキュメントを特定する必要があります。したがって、これは、ウェブページをクロールした後(本の章を読んだ後)に戻るようなものです。したがって、その逆インデックスと呼ばれます。

これは私の推測です。


5

インデックスには多くの種類があります。たとえば、Bツリー、Rツリー、ハッシュ...さまざまな目的で、正しいインデックスを選択する必要があります。

逆索引は特別なものです。通常、全文検索エンジンで使用される逆索引。ドキュメント(またはドキュメントセット)内の単語の位置をできるだけ早く見つけることができる転置インデックスを使用します。メモリとCPUの制限について考えてください。他のインデックスではこのジョブを完了できません。

詳細については、luceneドキュメントを参照してください。オープンソースの検索エンジンです。 http://lucene.apache.org/java/docs/index.html


3

「逆ワードインデックス」という用語は、多数の単語を含む単一のドキュメントと、多数のドキュメントのリストを含む(または識別する)各一意の単語との関係の変化を指します。これは事実上、1対多の関係(Docs to Words)を取り、それを反転(または逆転)することで、新しい「反転」した1対多の関係が存在するようになります。ドキュメント(つまり、その単語を含むすべて)。その起源は本当に単純で、「逆インデックス」という用語は、コンピュータや電子高速インデックスが存在するずっと前から同じタイプの手動インデックスを表すために使用されていました(そうです、確かに、私は古いギーザプログラマです。グレースホッパーを「甘い若い女性」と見なすのに十分な年齢 COBOLがピカピカの新しい言語であったときに求愛するのに適した年齢)。個人用RAMがまだ機能している場合、有用な、場合によっては価値のある、歴史的な1ビットまたは2ビットを提供することがありますので、まだgeezersを破棄しないでください。[ニヤリ]


2

逆索引では、次の形式になります。

word1->出現するドキュメントのリスト(ソート順)

word2->出現するドキュメントのリスト(ソート順)

単語がに出現するドキュメントを見つけることができるため、検索エンジンのクエリ処理に非常に役立ちます。

この逆索引を作成するには、監視付きマシンのリーリングを使用できます。


6
それは私にとってインデックスのように聞こえますが、それについて何が逆転していますか?
guidoism

2
@guidoism反転インデックスは、フォワードインデックスの反転です。前方インデックスは、各ドキュメントの単語のリストを格納します。例:Doc-> w1、w2
プログラマー

ForwardインデックスとInvertedインデックスの違いはまだわかりません(どのように機能するかに関しては、名前付けビットを残します)。私にとっては、フィールドを一連のドキュメントIDにマップするインデックスのように見えます。これは、オラクルのbtree(別名フォワードインデックス)がデータを編成する方法を理解した方法です。転置インデックスの原則に違いはありません。Docのマッピング-> w1、w2、w3は、検索の点で私には非効率的な提案のように見えます。そもそもなぜこれなのかしら?それは私を正方形に戻します。:-)。
user1189332

@Programmerの簡単な質問:逆索引が作成された後、順索引ファイルからエントリを削除することは現実的ですか
ロイ・リー

0

もう1つの違い:

転置インデックスを使用した更新の処理は、フォワードインデックスと比較してコストがかかります。

フォワードインデックスは、対応するドキュメントインデックスのみに変更を反映することで更新を簡単に処理しますが、逆インデックスでは、同じ変更が逆インデックス全体の複数の位置に反映される必要があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.