Quanto è importante la dimensione dell'indice durante la ricerca?

7

La mia azienda ha recentemente iniziato a utilizzare Apache Solr per cercare i suoi dati. Man mano che impariamo a usarlo, abbiamo percorso il percorso dell'indicizzazione di più campi per ottenere i risultati di cui abbiamo bisogno. Molti di questi sono N-Grammati o Edge-N-Grammed (N-grammati, ma solo dal bordo; per inizia con la ricerca).

La grammatica per natura occupa molto spazio, il che richiede più tempo per la ricerca. Lo spazio è economico, ma il tempo lo è meno. Il tempo dell'indice non è troppo importante, dal momento che un'importazione delta (ottieni solo le modifiche dall'ultimo indice) è estremamente veloce e paghi solo una penalità alla prima importazione. Ciò che non siamo stati in grado di determinare è l'effetto della dimensione dell'indice sui tempi di interrogazione. Ovviamente un indice più lungo richiede più tempo per la ricerca, ma il tempo aggiunto dalla n-gramming di un campo è difficile da prevedere.

Come si determina se un campo vale la grammatura? Puoi prevedere quanto tempo impiegherà una query quando grammi un campo?

    
posta Michael K 27.03.2012 - 16:28
fonte

1 risposta

3

Bene, la cosa migliore che puoi fare è eseguire i tuoi benchmark!

Confronta la velocità media su diverse migliaia di query di test su un indice che include ngrams rispetto a uno che li esclude. Non deve essere il tuo indice reale completo (poiché potrebbe richiedere molto tempo per essere generato), solo una dimensione del campione sufficiente per farsi un'idea.

Tieni presente che puoi utilizzare debugQuery = on per analizzare come una query viene eseguito e forse per generare un indice migliore. Ad esempio, vedi Libreria Digitla di Hathi Trust Ottimizzazione delle prestazioni di ricerca . Utilizzando CommonGrams e analizzando le query, sono stati in grado di ridurre il tempo medio di interrogazione del 50%.

Quindi, è meglio gestire i propri benchmark, ma ci sono anche alcuni benchmark esistenti online. Per esempio vedi Sakai Solr Benchmark , che confronta, tra le altre cose, le prestazioni della query usando un indice con ngrams e uno senza . Se i dettagli sono abbastanza simili al tuo caso d'uso, questo benchmark dovrebbe darti un'idea approssimativa di come andrà a finire per te. Per riassumere questo punto di riferimento:

  • Utilizzo di documenti di circa 2000 parole di lunghezza e composti da parole inglesi casuali a frequenza simile a quella inglese. Totale corpus circa 6 GB.
  • Limitazione degli n-grammi indicizzati a 3, 4 e 5 grammi (anche con un test che indicizza il bordo di ancoraggio sinistro n-grammi fino alla lunghezza 15).
  • Esecuzione di benchmark sotto carico di 5 utenti concorrenti.
  • Utilizzo di hardware medio-secondario del server.

Risultati (in media tempo di interrogazione):

  • Senza n-grammi: 159 ms
  • Con 3, 4 e 5 grammi: 393 ms
  • Con 3, 4 e 5 grammi e bordo con ancoraggio a sinistra fino a 15 grammi: 450 ms

(Hanno anche altri risultati tra cui quelli che chiamano indici "snelli").

Il takeaway: se i tuoi dati sono abbastanza simili ai loro, l'aggiunta di n-gram all'indice può aumentare il tempo di interrogazione di un fattore da 2,5 a 3. Naturalmente, devi prendere questi risultati con un pizzico di sale, perché ci sono così tanti fattori specifici per i tuoi dati. Questo è il modo migliore di utilizzarlo non come un dato di fatto, ma come una linea guida su cosa aspettarsi quando esegui i tuoi benchmark .

    
risposta data 02.04.2012 - 21:47
fonte

Leggi altre domande sui tag