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.
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.
Yanıtlar:
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 forward
ve hangisi inverted
hepimiz 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:
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.
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).
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.
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.
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.
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
.
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 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.
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 :-)
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.
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
"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ış]
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.
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.