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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top