2014-06-17 15 views
10

Sto cercando di ottenere la ricerca full text mongodb con più campi di lavoro. Ho impostato l'indice su 3 campi-nome, descrizione, categoria, e verificato conricerca testo mongodb con più campi

document.collection.getIndexes(), che RITORNI a

[ 
    { 
     "v" : 1, 
     "key" : { 
      "_id" : 1 
     }, 
     "name" : "_id_", 
     "ns" : "document.collection" 
    }, 
    { 
     "v" : 1, 
     "key" : { 
      "name" : 2, 
      "description" : 1, 
      "category" : 1 
     }, 
     "name" : "name_2_description_1_category_1", 
     "ns" : "document.collection", 
     "background" : true, 
     "safe" : null 
    } 
] 

Ora, se provo a eseguire una ricerca, utilizzando la follwing Comando

db.collection.find( {$text:{$search:'alias'}} ).limit(10) 

ha ottenuto il seguente messaggio di errore:

error: { 
    "$err" : "Unable to execute query: error processing query: ns=document.collection limit=10 skip=0\nTree: TEXT : query=alias, language=, tag=NULL\nSort: {}\nProj: {}\n planner returned error: need exactly one text index for $text query", 
    "code" : 17007 
} 

Ho provato i documenti di google e mongodb ma non sono riuscito a trovare nulla.

+1

Questo non è un indice di testo. Il nome avrebbe "testo" dopo ogni nome di campo e altri indicatori. –

risposta

16

È necessario creare un text index sui campi che si desidera cercare:

db.deals.ensureIndex({ name: "text", description : "text", category : "text" }); 

Dalla documentazione del $text dell'operatore:

$ testo esegui una ricerca testo sul contenuto dei campi indicizzato con un indice di testo.

L'indice creato per i tre campi è un indice composto, non un indice di testo. L'indice di testo sarà simile a questo:

{ 
    "v" : 1, 
    "key" : { 
     "_fts" : "text", 
     "_ftsx" : 1 
    }, 
    "name" : "name_text_description_text_category_text", 
    "ns" : "test.deals", 
    "weights" : { 
     "category" : 1, 
     "description" : 1, 
     "name" : 1 
    }, 
    "default_language" : "english", 
    "language_override" : "language", 
    "textIndexVersion" : 2 
} 
+0

Ho già: 'db.deals.ensureIndex ({nome:" testo "}, {descrizione:" testo "}, {categoria:" testo "})' –

+0

@MukeshSoni - guarda il mio aggiornamento –

+0

Grazie, @Christian , puoi dirmi come assicurarsiIndex in mangusta? Ho usato questa linea per creare l'indice: 'Schema.index ({nome: 2, descrizione: 1, categoria: 1});' –

Problemi correlati