Domanda
Sto creando un " Ricerca libri " API usando Lucene. Devo indicizzare i campi Nome libro, Autore e Categoria libro nell'indice Lucene.
Un singolo libro può rientrare in più categorie di libri distinti ... ad esempio:
BookName1: azione, umorismo, filosofia. BookName1 --fiction, science. BookName1: ora, affari. BookName4-humor e così via .....
L'utente dovrebbe essere in grado di cercare tutti i libri in una particolare categoria, ad esempio "homour".
Data questa situazione, come posso indicizzare i campi sopra e creare la query in lucene?
Soluzione
Puoi avere un campo per un documento Lucene ricorrere più volte. Crea il documento, aggiungi i valori per il nome e l'autore, quindi fai lo stesso per ogni categoria
- crea nuovo documento lucene
- aggiungi campo nome e valore
- aggiungi campo e valore dell'autore
- per ogni categoria:
- aggiungi campo categoria e valore
- aggiungi documento all'indice
Quando cerchi l'indice per una categoria, restituirà tutti i documenti che hanno un campo categoria con il valore che stai cercando. La categoria dovrebbe essere un campo "Parola chiave".
L'ho scritto in inglese perché il codice specifico è leggermente diverso per la versione lucene.
Altri suggerimenti
Puoi creare una semplice categoria " " campo, in cui vengono elencate tutte le categorie di un libro separato da spazi.
Quindi puoi cercare qualcosa del tipo:
stock market AND category:(+"business")
O se vuoi cercare in più di una categoria
stock market AND category:(+"business" +"philosophy")
Vorrei usare Solr - è basato su Lucene e gestito dall'ASF, ma è molto, molto più facile da usare rispetto a Lucene, soprattutto per i nuovi arrivati.
Se offre praticamente tutte le funzionalità principali di Lucene (sicuramente tutto ciò di cui hai bisogno per il progetto che descrivi), oltre a cose extra come snapshot, replica, schemi, ...
In Solr, definiresti semplicemente i campi in cui vuoi indicizzare qualcosa del genere in schema.xml
:
<field name="book_id" type="string" indexed="true" stored="true" required="true" multiValued='false'/>
<field name="book_name" type="text" indexed="true" stored="true" required="true" multiValued='false' />
<field name="book_authors" type="text" indexed="true" stored="true" required="true" multiValued='true' />
<field name="book_categories" type="textTight" indexed="true" stored="true" required="true" multiValued='true' />
Nota che l'attributo multiValued = 'true'
ti consente di passare efficacemente un array o un elenco a questo campo, che viene diviso e indicizzato bene da Solr.
Una volta che hai questo, avvia Solr e puoi fare domande come " book_authors: Hemingway
" oppure " book_categories: romanze book_categories: mulini
" ;.
Esistono diversi gestori di query pre-scritti e configurati per eseguire operazioni come l'analisi di query complesse (corrispondenze fuzzy, operazioni booleane, aumenti del punteggio, ...) e poiché l'API di Solr è esposta su HTTP, tutto è racchiuso da un numero di librerie client, quindi non è necessario gestire personalmente i dettagli di basso livello della creazione di query.
Esistono molti great documentazione sul loro sito Web per iniziare.