10 suggerimenti per query di ricerca migliori in Apache Solr

Apache Solr è un motore di ricerca open source nel cuore, ma è molto di più. È un database NoSQL con supporto transazionale. È un database di documenti che offre supporto SQL e lo esegue in modo distribuito.

In precedenza, ti ho mostrato come creare e caricare una raccolta in Solr; puoi caricare quella raccolta ora se non l'hai fatto in precedenza. (Divulgazione completa: lavoro per Lucidworks, che impiega molti dei contributori chiave al progetto Solr.)

In questo post, ti mostrerò altre 10 cose che puoi fare con quella raccolta:

1. Filtrare le query

Considera questa domanda:

//localhost:8983/solr/ipps/select?fq=Provider_State:NC&indent=on&q=*:*&wt=json

A prima vista, questa query sembra simile a se l'ho appena fatto q=Provider_State:NC. Tuttavia, le query di filtro restituiscono solo ID e non influiscono sul punteggio. Anche le query di filtro vengono memorizzate nella cache. Questo è un buon modo per trovare il più pertinente q=blue suedein department:footwearrispetto a department:clothingo department:music.

2. Sfaccettatura

Prova questa query:

//localhost:8983/solr/ipps/select?facet=on&facet.field=Provider_State&facet.limit=-1&indent=on&q=*:*&wt=json

Quanto segue viene restituito all'inizio:

ID

La sfaccettatura ti dà i conteggi della tua categoria (tra le altre cose). Se stai implementando un sito di vendita al dettaglio, è così che fornisci le categorie e i conteggi delle categorie per i reparti o altri modi in cui dividi il tuo inventario.

3. Range sfaccettatura

Aggiungilo a una stringa di query: facet.interval=Average_Total_Payments&facet.interval.set=[0,1999.99]&facet.interval.set=[2000,2999.99]&facet.interval.set=[3000,3999.99]&facet.interval.set=[4000,4999.99]&facet.interval.set=[5000,5999.99]&facet.interval.set=[6000,6999.99]&facet.interval.set=[7000,7999.99]&&facet.interval.set=[8000,8999.99]&facet.interval.set=[9000,10000]

Otterrai:

Questa sfaccettatura di intervallo può aiutare a suddividere un campo numerico in categorie di intervalli. Se stai aiutando qualcuno a trovare un laptop nella fascia $ 2.000- $ 3.000, questo è per te. Puoi eseguire una query simile senza codificare in modo rigido gli intervalli, procedendo in questo modo:facet.range=Average_Total_Payments&facet.range.gap=999.99&facet.range.start=2000&facet.range.end=10000

4. DocValues

Nel tuo schema, assicurati che l' docValuesattributo sia selezionato per i campi su cui stai sfaccettando. Questo ottimizza il campo per questi tipi di ricerche e salva sulla memoria al momento della query, come mostrato in questo estratto schema.xml:

5. PseudoFields

Puoi eseguire operazioni sui dati e restituire un valore. Prova questo:

//localhost:8983/solr/ipps/select?fl=Provider_Name,%20Average_Total_Payments,price_category:if(min(0,sub(Average_Total_Payments,5000)),%22inexpensive%22,%22expensive%22)&indent=on&q=*:*&rows=10&wt=json

L'esempio utilizza alcune delle funzioni integrate di Solr per classificare i fornitori come costosi o economici in base ai pagamenti totali medi. Ho inserito price_category:if(min(0,sub(Average_Total_Payments,5000)),"inexpensive","expensive")l' flelenco dei campi, o, insieme ad altri due campi.

6. Interrogare i parser

defType ti consente di scegliere uno dei parser di query di Solr. Il parser di query standard predefinito è davvero ottimo per query generate dalla macchina. Ma Solr ha anche i parser Dismax ed eDismax, che sono migliori per le persone normali: puoi fare clic su uno di essi nella parte inferiore della schermata delle query di amministrazione o aggiungerli defType=dismaxalla stringa di query. Il parser Dismax generalmente produce risultati migliori per le query immesse dall'utente trovando il "massimo di disgiunzione" o il campo con il maggior numero di corrispondenze e aggiungendolo al punteggio.

7. Potenziamento

Se effettui una ricerca Provider_State:AL^5 OR Provider_State:NC^10, i risultati nella Carolina del Nord avranno un punteggio maggiore rispetto ai risultati in Alabama. Puoi farlo nella tua query ( q=""). Questo è un modo importante per manipolare i risultati restituiti.

8. Intervalli di date

Sebbene i dati di esempio non supportino alcuna ricerca per intervallo di date, se lo facessero sarebbe formattato come timestamp_dt:[2016-12-31T17:51:44.000Z TO 2017-02-20T18:06:44.000Z]. Solr supporta campi di tipo data e ricerche e filtri per tipo di data.

9. TF-IDF e BM25

Il meccanismo di punteggio originale utilizzato da Solr (per determinare quali documenti erano rilevanti per il termine di ricerca) è chiamato TF-IDF, per "frequenza del termine rispetto alla frequenza del documento inversa". Restituisce la frequenza con cui un termine si verifica nel campo o nel documento rispetto alla frequenza con cui tale termine ricorre nel complesso nella raccolta. Il problema con questo algoritmo è che il fatto che "Game of Thrones" ricorra 100 volte in un documento di 10 pagine contro dieci volte in un documento di 10 pagine non rende il documento 10 volte più rilevante. Lo rende più pertinente ma non 1 0 volte più rilevante.

BM25 semplifica questo processo, consentendo in modo efficace ai documenti di raggiungere un punto di saturazione, dopodiché viene mitigato l'impatto di ulteriori eventi. Le versioni recenti di Solr utilizzano tutte BM25 per impostazione predefinita.

10. debugQuery

Nella Console delle query di amministrazione, puoi selezionare debugQuery da aggiungere debugQuery=onalla stringa di query Solr. Se esamini i risultati, troverai questo output:

Tra le altre cose si vede che sta usando LuceneQParser (il nome del parser di query standard) e, soprattutto, come è stato valutato ogni risultato. Puoi vedere l'algoritmo BM25 stesso e come i boost hanno influenzato il punteggio. Se stai cercando di eseguire il debug della tua ricerca, questo è uno strumento molto prezioso!

Questi dieci aspetti di Solr sicuramente mi aiutano quando uso Solr per la ricerca e la messa a punto dei miei risultati.