2013-06-25 14 views

risposta

7

Fondamentalmente perché teniamo in memoria un array di 200 elementi mentre trasmettiamo in streaming tutti gli hit, conservando i 200 migliori punteggi. Una vista standard esegue solo lo streaming di tutte le righe tra un punto iniziale e uno finale. L'intento di una ricerca è tipicamente quello di trovare l'ago in un pagliaio, quindi in genere non si recuperano migliaia di risultati (confrontare con Google, che fa clic fino alla pagina 500?). Se non trovi quello che vuoi, raffini la tua ricerca e guarda di nuovo.

Ci sono casi in cui il recupero di corrispondenze ha senso (e possiamo eseguire lo streaming nell'ordine in cui li troviamo, quindi non c'è alcun problema di RAM) . Questa è una funzionalità che possiamo (e dovremmo) aggiungere, ma non è attualmente disponibile.

+0

Uso gli indici di ricerca (in combinazione con l'analizzatore di parole chiave/perfinder) ovunque per compensare la scarsa capacità di query nativa di CouchDB, ecco perché. –

4

Vale anche la pena notare che la _view API (ovvero "mapreduce") è fondamentalmente diversa dalla ricerca a causa dell'ordine dei risultati su disco. Le viste materializzate sono mantenute negli alberi b + di CouchDB, quindi sono essenzialmente ordinate per chiave. Ciò consente query range efficienti (tasto start/end) e rende banale il limite/paging. Tuttavia, ciò significa anche che è necessario ordinare le righe di visualizzazione sul disco, il che limita i tipi di query booleane che è possibile eseguire rispetto alle viste materializzate. È qui che la ricerca aiuta, ma Bob (alias "The Lucene Expert") rileva le limitazioni.