Tersine çevrilmiş bir dizin ile düz eski bir dizin arasındaki fark nedir?


100

Yazılım mühendisliğinde her zaman indeksler oluştururuz (örneğin veritabanlarında) ama aynı zamanda birçok insanın tersine çevrilmiş indeksler hakkında konuştuğunu da duyuyorum. İkisi arasında temelde farklı bir şey var mı? Aynı şey gibi geliyorlar.



Açıklığa kavuşturmak için, şu soruyu soruyorsunuz: Bir tabloyu, bu tabloda zaten var olan verilere göre ayıran normal bir dizinin ( en.wikipedia.org/wiki/Index_%28database%29 ) farkı nedir? Bu doğru mu?
jwheron

3
@guidoism Herkesin bahsetmeyi başaramadığı şey (normallik bunu kısmen örneklerle tanımlasa da ve lovesh hemen hemen düğme üzerindedir), tersine çevrilmiş dizinlerin temel verileri daha verimli olması için "ters çevirmesidir" (örneğin, farklı bakış açılarından arama yapmak için anahtarları / verileri değiştirin veya hızlı arama algoritmalarına izin vermek için alfabetik / sayısal olarak sıralama), oysa standart bir dizin verileri bulduğu gibi saklar. "Geri / ileri" referansları ve "ters çevirme" kelimesinin gerçek anlamı burada geçerli değildir, bunun yerine, eldeki göreve özgü verimli bir format üretmek için verilerin tersine çevrilmesini ifade eder.
TheManWithNoName

Yanıtlar:


217

Yaygın kullanımlardan biri "... hızlı tam metin aramaya izin vermek."

İki tür belirtmek yönlülük . Biri sizi indekste ileriye götürür , diğeri sizi indekste geriye (tersi) götürür . Bu kadar. Burada ortaya çıkarılacak bir gizem yok. Aksi takdirde, iki tür aynıdır, yalnızca hangi bilgilere sahip olduğunuz ve sonuç olarak hangi bilgileri bulmaya çalıştığınız sorusudur .

Sorunuzu yanıtlamak için, bugün neden kullanımın ne olduğunu bilmenin bir yolu olduğunu sanmıyorum. Bu çok önemli tek nedeni olan tanımlamak forwardve hangisi invertedhepimiz onlar hakkında bir görüşme böylece ve herkes bahsettiğimizi hangi yönde biliyor. "Sol" ve "sağ" terimlerini düşünün: bunlar görecelidir. Hangisinin önemi yok, kelimelerin anlam kazanması için herkesin hangisinin "sol", hangisinin "doğru" olduğu konusunda hemfikir olması dışında. Bir kültür olarak, sola ve sağa dönmeye karar vermiş olsaydık, üzerinde mutabık kalınan anlam değiştiğinden beri, "sağa dönüş" ile "sola dönüş" arasındaki farkın ne olduğunu anlamakla aynı sorunu yaşarsınız. Ancak, adlandırma keyfidir, anlam üzerine.

"Lütfen sadece terimleri tanımlamayın" diye sorduğunuz yorumunuzda, noktayı kaçırıyorsunuz ve sanırım aralarında kesinlikle hiçbir fark olmadığında ifadelere takılıyorsunuz.


Gelecekteki okuyucuların yararına, şimdi birkaç "ileri" ve "ters" dizin örneği sunacağım:

Örnek 1: Web araması

Bir indeksin tersinin matematikteki bir fonksiyonun tersi gibi bir şey olduğunu düşünüyorsanız, tersi farklı bir biçime sahip özel bir şeyse, o zaman yanılıyorsunuz: burada durum bu değil.

Bir arama motorunda, bazı anahtar sözcükler girdiğiniz ve sonuçları geri aldığınız bir belge listesi (web sitelerindeki sayfalar) vardır.

Bir ileri indeks (ya da sadece indeks) olduğu belgelerin listesi ve hangi kelimeleri üzerlerinde görünen. Web araması örneğinde, Google web’i tarar, dokümanların listesini oluşturur ve her sayfada hangi kelimelerin göründüğünü bulur.

Ters endeksi ise kelimelerin listesini ve göründükleri belgeler. Web araması örneğinde, kelime listesini (arama sorgunuz) sağlarsınız ve Google dokümanları (arama sonucu bağlantıları) üretir.

Her ikisi de indeks - bu sadece hangi yöne gittiğinle ilgili bir soru. Yönlendirme, belgelerden -> sözcüklere, ters çevrilmiş sözcükler-> belgelerden -> belgelere doğrudur.

Örnek 2: DNS

Diğer bir örnek, bir DNS araması (bir ana bilgisayar adı alır ve bir IP adresi döndürür) ve bir ters aramadır (bir IP adresi alır ve size ana bilgisayar adını verir).

Örnek 3: Bir kitap

Bir kitabın arkasındaki dizin , aslında yukarıdaki örneklerde tanımlandığı gibi ters çevrilmiş bir dizindir - sözcüklerin listesi ve kitapta nerede bulunacağı. Bir kitapta, içindekiler tablosu ileriye dönük bir indeks gibidir : bu, kitabın içerdiği belgelerin (bölümlerin) bir listesidir, ancak bu bölümlerdeki kelimeleri listelemek yerine, içindekiler tablosu yalnızca bir ad / genel açıklama verir. bu belgelerde (bölümler) yer almaktadır.

Örnek 4: Cep telefonunuz

Vadeli endeks cep telefonunda kişilerinizi listesi ve hangi telefon numaralarını (hücre, ev, iş) bu kişilerle ilişkili olduğunu. Ters indeks el bir telefon numarası girmek için mümkün kılan budur ve vurduğunda telefonunuz telefon numarasını almıştır çünkü, yerine numarası yerine, kişinin adını görmek "dial" ve size onunla ilişkili kişi bulduk.


11
zaman ayırdığın için teşekkürler. ama cevabınız hala bilgilendirici değil. Ödül talebimde bahsettiğim gibi, ilgili terimlerin ne anlama geldiğini ve neden ortaya çıktıklarını anlıyorum. Sorum şuydu: "Tersine çevrilmiş indeksleri adlandıran insanlar, onlara sadece basit indeksler diyen uzun süredir devam eden bir geleneğimiz varken neden onları tersine çağırdı? Örneğin, sizin de belirttiğiniz gibi kitapların sonundaki indeksler aslında tersine çevrilmiştir. Tarihsel açıdan bakıldığında kitapların sonundaki dizinler web dizinlerinden önce geldi. O halde neden geleneği tersine çevirelim? " Tahminim, az önce olan şeylerden sadece biriydi ...
Manav

1
"Bunun neden terimlerin kullanımının tarihsel inceleme yapılmadan bilmek mümkün olduğunu sanmıyorum" - Ben ümit Biriyle olmak istiyorum böyle bir tarihsel inceleme yapmak ve bir cevap verin. :-) Çünkü bunun "indeks" in ortak dil anlamına zıt olması şaşırtıcı. (Olası cevaplardan biri, "tersine çevrilmiş indeks" ifadesi ilk düşünüldüğünde, "indeks" ifadesinin zaten bazı "indeks" ters çevrilmiş "tersine çevrilmiş indeks" için olduğu, yani "indeks" in gerçek hayattaki anlamı ters çevrilmiş olmasıdır. ". Bu durumda, ileri" endeks "in neden garip bir isim aldığını bilmek faydalı olacaktır.)
ShreevatsaR

2
@jefflunt sadece ileri indekslemenin neden kullanılması gerektiğini merak ediyor. Özellikle buradaki web arama örneğinden bahsediyorum. Yani ileriye endeksleme parçası olduğu gibi google, eğer belgelerin listesi <-> içlerindeki kelimeler ve sonuçta kullandığı kelime listesini <-> dokümanların listesi arayışlarında, neden belgelerin listesi <-> kelimeler onları ? Başka bir deyişle sorum şu: Google'a belirli bir sayfada (belgede) hangi kelimelerin bulunduğunu veya esas olarak aradığı anahtar kelimelerin sayfalarda nerede geçtiğini soracak. O zaman neden ileriye doğru indeksleme yapalım?
quickbrownfox

1
Yani İlişkisel veritabanı bağlamında tersine çevrilmiş bir dizin yok mu? veya bu dizinler aslında 'ters çevrilmiş dizindir'. Literatürdeki "kabul edilebilir" terimlerle ilgili sorunlar, farklı bir anlaşmaya başlayan ve topluluğun bir kısmının bu terminolojiyi takip eden birkaç öncü veya birlik tarafından cehalet / hata / tartışmadır. Bir süre sonra herkesin kafası karışır. Eminim yazılımda başlangıçta A diyelim, ancak farklı topluluklar kasıtlı veya yanlışlıkla A 'veya B olarak kabul eden, sözdizimsel olarak yol dışı olan birçok terim vardır. Hala yeni öğrencinin kafasını karıştırıyor.
nir

1
@ Roylee - O teknik incelemeyi okumadım. Sanırım sorduğunuz şey, "İleriye dönük dizini güncellerken ters çevrilmiş dizini güncelliyor musunuz?" Sorunuz buysa, cevap evet.
jefflunt

27

Zaten ileriye dönük bir endeks olduğu için bunu tersine çevirdiler. İki bölümden oluşan arama motoru örneğini ele alalım: ilk bölüm belgeden sözcüğe bir dizin oluşturan "web gezgini ve ayrıştırıcı", ikinci bölüm sözcükten belgeye bir dizin oluşturan arama veritabanıdır. İlk indeksin var olması nedeniyle, ikinci indeksi doğal olarak tersine çevrilmiş indeks olarak adlandırıyoruz.

Bir kitabın TOC'sini (İçindekiler) indeks olarak adlandırırsanız, kitabın sonundaki indeksi "ters çevrilmiş indeks" olarak çağırmalısınız. Ya da diğer tarafta, TOC'yi ters çevrilmiş dizin olarak adlandırabilirsiniz.


6
Herkesin "normal bir endeks" hakkında düşündüğü şey olsa bile, neden bir indeksi "tersine çevrilmiş" olarak adlandırdığımız sorusuna cevap verdiği için bu kabul edilen cevap olmalıdır. Bir SQL b-ağaç indeksi, her kelime için, onu içeren tüm satırlara ("belgeler") bir işaretçi depolar. Biz buna "indeks" diyoruz. Ancak arama motorlarında bu aynı prosedürü birdenbire "ters indeks" olarak adlandırıyoruz. Temelde farklı olduğu için değil, ilk önce bir "ileri dizin" (bölünmüş metin) oluşturduğumuz ve sonra onu "tersine çevirdiğimiz" için. Sonuç olarak, "ters" adı, dizinin son yapısından değil, onu yaratma sürecinden gelir.
Foo Bar

@xeranic içgörüler için teşekkürler. Hızlı soru: Girişleri tersine çevrilmiş dizin oluşturulduktan sonra ileri dizin dosyasından kaldırmak pratik mi?
Roy Lee

3
@FooBar'a katılıyorum. Bu cevap doğru cevap olarak seçilmelidir. inverted index Hayatımızdaki tüm normal indeksler zaten olarak kullanılmasına rağmen neden yeni bir terim icat ettiğimizi cevapladı inverted.
Ryan Lyu

7

tipik olarak indeks hakkında konuşurken, uygulamayı hızlandırmak için yapılan bazı ek hesaplamaları veya saklanan prosedürlerin sonuçlarını kastediyorsunuz (ör. MySQL veya diğer RDBMS, MySQL'e danışın ). İndeksleme ayrıca önbelleğe alma vb. İle ilgili olabilir.

Tersine çevrilmiş dizin, öncelikle (tam metin) aramaya yönelik yapıda dosya oluşturur.

Ters çevrilmiş dizin iki ana dosyadan oluşur:

  • Kelime bilgisi
  • Oluşumlar

Kelime haznesinde metinden çıkarılan yaygın kelimelerdir (tabii ki zamirler gibi kara liste kelimeleri filtreledikten sonra). Oluşumlar dosyası, sözcükler ve belgeler arasındaki bağlantıyı tutar (sözcük1, doc3'te değil, doc1 ve doc2'de görünür). Bir matris biçiminde temsil edilir.

İndeksleme süreci - ters indeks

Yukarıdaki resimde, bahsedilen iki dosyanın yaratılma süreci gösterilmektedir.

Bu sorunsalla daha fazla ilgileniyorsanız, size Ricardo Yated tarafından yazılmış harika bir kitap önerebilirim - Modern Bilgi Erişimi ( Amazon'da görün ) - sayfa 200 hakkında düşünüyorum.

Umarım yardımcı olur :-)


Tersine çevrilmiş indeksin gerçekte ne olduğunu açıkladığı için bu çok iyi bir cevap. İndeks oluşturarak ve tersine çevirerek etkinleştirilen bir arama yeteneği için kullanılan algoritmadan farklı olan ileri indeksleme ve ters indeksleme fikrini aşar.
AN6U5

6

normallik halihazırda ileriye dönük ve tersine çevrilmiş bir indeks arasında harika bir ayrım yapmıştır , ancak neden birine ileri indeks ve diğerine ters indeks denildiği sorusu için, belki de bu yüzden bu şekilde adlandırılır ---

Arama motoru taraması ve indeksleme (veya bir kitap için indeks oluşturma) örneğini ele alırsak, siz web sayfalarını tararken (veya kitabı okurken) veya ileriye giderken aynı anda bir ileri indeks oluşturulabilir . Dolayısıyla, taranacak 10 web sayfanız (veya bir kitapta 10 bölüm) varsa, ilk web sayfasını tarayabilir (ilk bölümü okuyabilir) ve ardından web sayfasında görünen kelimelerin bir listesini yapabilir (bölümde görünen kelimeler) ve devam edebilirsiniz. diğer web sayfaları (diğer bölümler) için bu işlem, bu nedenle 10 web sayfasının tamamını taradığınızda (10 bölümün tamamını okuyun) ileri dizininiz, içerdiği sözcüklerin bir listesini işaret eden her web sayfası (bölüm) ile tamamlanır .

Ancak tersine çevrilmiş bir dizin oluşturmak için 10 web sayfasını taramanız (10 bölümü okuyun) ve ardından her bir belge listesinden her sözcüğü alıp hangi belgelerin bu sözcüğü içerdiğini bulmanız gerekir. Yani bu, web sayfalarını taradıktan sonra geriye gitmek gibidir (kitabın bölümlerini okuyun) . Bu yüzden tersine çevrilmiş indeks denir.

Bu sadece benim spekülasyonum.


5

Pek çok indeks türü vardır. Örneğin, B-ağacı, R-ağacı, hash ... Farklı amaçlar için doğru indeksi seçmeliyiz.

Tersine çevrilmiş indeks özel bir indeks. Tersine çevrilmiş dizin genellikle tam metin arama motorunda kullanılır. Ters çevrilmiş dizini kullanın, bir kelimenin bir belgede (veya belgelerde) yerini olabildiğince hızlı bulabiliriz. Bellek ve işlemci sınırını düşünün, diğer dizin bu işi tamamlayamaz.

Daha fazla ayrıntı için lucene belgesini okuyabilirsiniz. Açık kaynaklı bir arama motorudur. http://lucene.apache.org/java/docs/index.html


3

"Tersine Çevrilmiş Sözcük Dizini" terimi, çok sayıda sözcük içeren tek bir belgenin, birçok belgenin bir listesini içeren (veya tanımlayan) her benzersiz sözcükle ilişkisindeki değişikliği ifade eder. Bu, Bire Çoğa İlişkiyi (Dokümanlar'dan Kelimelere) etkili bir şekilde almak ve onu tersine çevirmek (veya tersine çevirmek), öyle ki artık yeni bir "Ters" Bire Çoğa İlişkinin varolmasıdır; Belgeler (yani o kelimeyi içeren her şey). Kökeni gerçekten bu kadar basit ve "tersine çevrilmiş indeks" terimi, bilgisayarlar ve elektronik yüksek hızlı indeksleme var olmadan çok önce aynı tipteki manuel indeksleri tanımlamak için kullanılıyordu (evet, kuşkusuz, ben yaşlı, moruk bir programcıyım, neredeyse Grace Hopper'ı "tatlı bir genç bayan" olarak görecek yaşta COBOL'un yeni ve parlak bir dil olduğu zamanlarda kur yapmaya uygun yaş). Kişisel RAM'imiz hala çalışıyorken, zaman zaman yararlı ve hatta değerli, tarihsel bir ya da iki tane sağlayabileceğimizden, lütfen henüz bizi morukları atmayın. [sırıtış]


2

ters çevrilmiş dizinlerde aşağıdaki biçime sahibiz:

word1-> içinde bulunduğu dokümanların listesi (sıralı sırayla)

word2-> içinde bulunduğu dokümanların listesi (sıralı sırayla)

Kelimenin geçtiği dokümanları bulmamıza izin verdiği için arama motoru sorgu işlemi için çok kullanışlıdır.

Bu ters çevrilmiş dizini oluşturmak için denetimli makine öğrenimini kullanabilirsiniz.


6
Bu bana bir indeks gibi geliyor, bunda tersine dönen ne var?
guidoism

2
@guidoism Tersine çevrilmiş bir dizin, bir ileri dizinin tersine çevrilmesidir. ileri dizin, her belge için bir sözcük listesi saklar. Örneğin, Doc-> w1, w2
Programcı

Hala İleri ve Ters çevrilmiş indeks arasında herhangi bir fark bulamıyorum (nasıl çalıştığı açısından, adlandırma bitini bırakın). Her ikisi de bana göre, bir alanı bir grup belge kimliğiyle eşleyen bir dizine benziyor. Oracle btree'nin (aksi takdirde ileri indeks olarak adlandırılır) verileri nasıl düzenlediğini bu şekilde anladım. Tersine çevrilmiş endeksin ilkelerinde herhangi bir fark görmüyorum. Bir Dokümanın Eşleştirilmesi -> w1, w2, w3, bana arama açısından yetersiz bir teklif gibi görünüyor. Acaba neden bu ilk etapta? Bu beni başa dönmeye bırakıyor. :-).
user1189332

@Programmer Hızlı soru: Girişleri tersine çevrilmiş dizin oluşturulduktan sonra ileri dizin dosyasından kaldırmak pratik mi?
Roy Lee

0

Bir fark daha:

Tersine çevrilmiş endeks ile güncellemelerin işlenmesi, ileriye dönük endekse kıyasla pahalıdır.

İleri dizin, değişiklikleri yalnızca karşılık gelen belge dizininde yansıtarak güncellemeleri kolayca ele alırken, tersine çevrilmiş dizinde, aynı değişikliğin ters çevrilmiş dizinde birden çok konumda yansıtılması gerekir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.