MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Mongodb – indeks wielu tekstów:zbyt duży wzorzec klucza indeksu, kod błędu 67

Problem z sugerowaną strukturą:

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

Czy tak jest, chociaż teraz możesz to zrobić

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

a następnie uruchamiaj zapytania takie jak:

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

to teraz zwróci cały dokument tablicy, w którym pasuje element tablicy.

Możesz rozważyć odwoływanie się, aby każdy wynik rankingu był osobnym dokumentem, a słowa kluczowe i inne metadane były przywoływane, aby uniknąć powtarzania wielu informacji.

Masz więc dokument zawierający słowa kluczowe/metadane, taki jak:

{_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"}

a następnie dokument z wynikami, taki jak:

{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"}}

gdzie Keyword_id łączy się z (odwołaniami) do tabeli słów kluczowych/metadanych -- oczywiście w praktyce identyfikatory _id będą wyglądać jak "_id" :"519817e508a16b447c00020e", ale to tylko dla czytelności. Możesz teraz indeksować słowa kluczowe id, domenę i href, razem lub osobno, w zależności od typów zapytań, a nie otrzymasz index key pattern too large error i otrzymasz tylko jeden pasujący dokument, a nie całą zwróconą tablicę.

Nie jestem do końca jasny, gdzie potrzebujesz wyszukiwań w stylu rozmytym/regex i czy będziesz przeszukiwać metadane, czy tylko href i domenę, ale myślę, że ta struktura powinna być czystszym sposobem na rozpoczęcie myślenia o indeksowaniu, bez maksymalizacji indeksów, jak wcześniej. Umożliwi to również łączenie wyników wyszukiwania w normalnych indeksach z indeksami tekstowymi, w zależności od wzorca zapytania.

Możesz znaleźć tę odpowiedź Relacje MongoDB:osadzanie czy odniesienie? przydatne przy rozważaniu struktury dokumentu.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Jak usunąć dokumenty z wielu kolekcji na podstawie ID w MongoDB?

  2. Zaktualizuj dokument MongoDB w VB.NET za pomocą sterownika C#

  3. Masowe wstawianie mongodb w Meteor lub Node

  4. Przywróć dane Mongodb z JSON

  5. Jak skonfigurować klaster MongoDB obsługujący sesje?