MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Mongodb - Индекс с множество текстове:Шаблонът на ключ на индекса е твърде голям, код за грешка 67

Проблемът с предложената от вас структура:

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

Е, че въпреки че вече можете да го направите

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

и след това изпълнете заявки като:

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

това сега ще върне целия документ на масива, където елементът на масива съответства.

Може да помислите за препращане, така че всеки резултат от класирането да е отделен документ и ключовите думи и другите метаданни да се препращат, за да избегнете повтарянето на много информация.

И така, имате документ с ключови думи/метаданни като:

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

и след това документ с резултати като:

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

където keyword_id препраща към (препратки) към таблицата с ключови думи/метаданни -- очевидно на практика _id ще изглежда като "_id" :"519817e508a16b447c00020e", но това е само за четливост. Вече можете да индексирате ключови_идентификатор, домейн и href, заедно или поотделно, в зависимост от вашите типове заявки и няма да получите index key pattern too large error и ще получите само един съвпадащ документ, а не цял масив.

Не съм напълно наясно къде се нуждаете от търсене в размит/регекс стил и дали ще търсите метаданни или само href и домейн, но мисля, че тази структура трябва да бъде по-чист начин да започнете да мислите за индексиране, без да превишавате максимално индексите, по старому. Освен това ще ви позволи да комбинирате намерения в нормални индекси с текстови индекси, в зависимост от модела на вашата заявка.

Може да намерите този отговор MongoDB взаимоотношения:вграждане или справка? полезно при обмисляне на структурата на вашия документ.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Не можете да стартирате logstash с помощта на конфигурацията на mongoDB?

  2. Група брой 2 артикула масив от обекти mongodb

  3. MongoDB C# драйвер 2.0:Как да получите резултата от MapReduceAsync

  4. Как да премахна колекцията на TTL форма MongoDB?

  5. мулти сумиране/броене на mongodb (сумиране на пола и общо всички резултати)