MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Mongodb - Beberapa indeks teks:Pola kunci indeks kode kesalahan terlalu besar 67

Masalah dengan struktur yang Anda sarankan:

{
 keyword" : "Just an example query", 
 "rankings" :
    [{"rank" : 1, "domain" : "example1.com", "href" : "example1.com"},
     ...{ "rank" : 99, "domain" : "example99.com", "href" : "example99.com“}
 ]}
}

Apakah itu meskipun Anda sekarang dapat melakukannya

db.ranking.ensureIndex({"rankings.href":"text", "rankings.domain":"text"}) 

lalu jalankan kueri seperti:

db.ranking.find({$text:{$search:"example1"}});

ini sekarang akan mengembalikan seluruh dokumen array tempat elemen array cocok.

Anda mungkin ingin mempertimbangkan referensi sehingga setiap hasil peringkat adalah dokumen terpisah dan kata kunci serta meta data lainnya direferensikan, untuk menghindari pengulangan banyak informasi.

Jadi, Anda memiliki dokumen kata kunci/metadata seperti:

{_id:1, "keyword":"example query", "querydate": date, "other stuff":"other meta data"},
{_id:2, "keyword":"example query 2", "querydate": date, "other stuff":"other meta data 2"}

dan kemudian dokumen hasil seperti:

{keyword_id:1, {"rank" : 1, "domain" : "example1.com", "href" : "example1.com"},
... keyword_id:1, {"rank" : 99, "domain" : "example99.com", "href" : "example99.com"},
 keyword_id:2, {"rank" : 1, "domain" : "example1.com", "href" : "example1.com"},
 ...keyword_id:2, {"rank" : 99, "domain" : "example99.com", "href" : "example99.com"}}

di mana kata kunci_id menautkan kembali ke (referensi) tabel kata kunci/metadata -- jelas, dalam praktiknya, _id akan terlihat seperti "_id" :"519817e508a16b447c00020e", tetapi ini hanya untuk keterbacaan. Anda sekarang dapat mengindeks pada keyword_id, domain dan href, baik bersama-sama atau terpisah, tergantung pada jenis kueri Anda dan Anda tidak akan mendapatkan index key pattern too large error dan Anda hanya akan mendapatkan satu dokumen yang cocok daripada seluruh array yang dikembalikan.

Saya tidak sepenuhnya jelas di mana Anda memerlukan pencarian gaya fuzzy/regex dan apakah Anda akan mencari metadata atau hanya href dan domain, tetapi saya pikir struktur ini harus menjadi cara yang lebih bersih untuk mulai berpikir tentang pengindeksan, tanpa memaksimalkan indeks, seperti sebelumnya. Ini juga akan memungkinkan Anda untuk menggabungkan temuan pada indeks normal dengan indeks teks, tergantung pada pola kueri Anda.

Anda mungkin menemukan jawaban ini Hubungan MongoDB:sematan atau referensi? berguna saat mempertimbangkan struktur dokumen Anda.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Bagaimana cara menyimpan dokumen dalam agregasi dengan $unwind

  2. Cara mencari catatan dan kemudian menghapusnya

  3. Data kedaluwarsa luwak tetapi tetap di database

  4. bagaimana cara meneruskan variabel $tid, $id ke fungsi mentah?

  5. menghapus objek dari array objek bersarang mongodb