2010-03-21 20 views
9

Ho un indice Lucene che è attualmente sensibile al maiuscolo e al minuscolo. Voglio aggiungere l'opzione di una ricerca senza distinzione tra maiuscole e minuscole come un fallback. Ciò significa che i risultati che corrispondono al caso avranno più peso e appariranno per primi. Ad esempio, se il numero di risultati è limitato a 10 e ci sono 10 corrispondenze che corrispondono al mio caso, questo è sufficiente. Se ho trovato solo 7 risultati, posso aggiungere altri 3 risultati dalla ricerca senza distinzione tra maiuscole e minuscole.Ricerca sensibile al maiuscolo/minuscolo Lucene

Il mio caso è in realtà più complesso, dal momento che ho articoli con pesi diversi. Idealmente, avere una corrispondenza con il caso "sbagliato" aggiungerà un po 'di peso. Inutile dire che non voglio risultati duplicati.

Un approccio possibile consiste nell'avere 2 indici. Uno con il caso e uno senza e cerca entrambi. Naturalmente, c'è una certa ridondanza qui, poiché ho bisogno di indicizzare due volte.

C'è una soluzione migliore? Idee?

+0

hai provato copyField? vedi http://wiki.apache.org/solr/SchemaXml – Karussell

risposta

6

Hai già provato CopyField? vedi http://wiki.apache.org/solr/SchemaXml#Copy_Fields

Se non definire un nuovo campo B con una configurazione diversa e copiare campo A in B tramite copyField

+3

Bene, copyField è una funzione Solr e sto usando le bare nude Lucene. Tuttavia, posso semplicemente aggiungere un campo in più con lo stesso testo indicizzato, in lettere minuscole. Questo è molto meglio che creare un indice completamente separato, quindi +1. – zvikico

+0

ups, ok. Ho avuto esattamente lo stesso problema, ma stavo lavorando con solr. Ho aggiunto questa risposta un po 'troppo velocemente però. – Karussell

+0

Sono già attivo e in esecuzione con il campo extra, quindi la tua risposta mi ha dato un colpo nella giusta direzione. Questo è tutto ciò di cui avevo bisogno. Grazie ancora. Lo terrò aperto per vedere se riesco a ottenere soluzioni più efficienti. – zvikico

5

La ricerca Lucene è case sensitive, è solo che tutto l'input è di solito -carter inferiore passando attraverso Queryparser, quindi sembra che sia senza distinzione tra maiuscole e minuscole. In altre parole, non inserire la minuscola dell'input prima dell'indicizzazione e non eseguire mai una query minuscola nelle query (ad esempio, selezionare un analizzatore che analizzatore di parole chiave non minuscolo) , ad esempio.

[setLowercaseExpandedTerms][1](boolean lowercaseExpandedTerms) 

è possibile indicizzare i termini utilizzando analizzatore di maiuscole e minuscole e quando u vuole interrogazione case-insensitive utilizzare una classe che doesnot convertire i termini in minuscolo

sguardo jolly, Prefisso, e le query Fuzzy

+0

Ovviamente, l'utilizzo di un analizzatore sensibile al maiuscolo/minuscolo con una query di livello inferiore non produce i risultati corretti. – zvikico

+0

puoi fare lo stesso con sqlite o mysql? – Naveen

+1

@Naveen: sqlite e mysql hanno un motore di database completo, qual è la tua domanda? – Narayan

Problemi correlati