2009-07-06 17 views
10

Attualmente sto tentando di utilizzare Lucene per cercare i dati inseriti in un indice.Lucene - Caratteri jolly in frasi

Posso abbinare su frasi esatte racchiudendolo tra parentesi (cioè "Elaborazione documenti"), ma non riesco a trovare Lucene per trovare quella frase facendo alcun tipo di "Documento di elaborazione *".

La differenza evidente è il carattere jolly alla fine.

Attualmente sto tentando di utilizzare Luca per visualizzare e cercare l'indice. (Cade l'asterisco alla fine della frase durante l'analisi)

Aggiungendo le virgolette attorno i dati sembra essere il principale colpevole come la ricerca di documenti * funzionerà, ma "documento *" non lo fa

Qualsiasi l'assistenza sarebbe molto apprezzata

+0

Giocherellare con questo. Possibile soluzione. C'è un modo per fare una ricerca di prossimità con i caratteri jolly? Sembra che questo potrebbe causare un grande successo sulle prestazioni però. –

risposta

0

Non solo il QueryParser non supporta i caratteri jolly nelle frasi, PhraseQuery stesso supporta solo i Termini. MultiPhraseQuery si avvicina, ma come dice il suo sommario, è comunque necessario enumerare IndexReader.terms per abbinare il carattere jolly.

0

Sembra che QueryParser predefinito non sia in grado di gestirlo. È possibile creare un QueryParser personalizzato per i caratteri jolly nelle frasi. Se il tuo esempio è rappresentativo, stemming potrebbe risolvere il tuo problema. Si prega di leggere la documentazione per PorterStemFilter per vedere se si adatta.

0

Un'altra alternativa è l'utilizzo di NGrams e in particolare di EdgeNGram. http://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters#solr.EdgeNGramFilterFactory

Ciò creerà gli indici per ngram o parti di parole. Documenti, con una dimensione Ngram min di 5 e le dimensioni Ngram massimo di 8, sarebbe indice: Docum Docume Documento Documenti

c'è un po 'di un compromesso per la dimensione e il tempo di indice. Uno dei libri Solr fornisce una guida approssimativa: L'indicizzazione richiede 10 volte più tempo Utilizza 5 volte più spazio su disco Crea termini 6 volte più distinti.

Tuttavia, EdgeNGram farà meglio di così.

È necessario assicurarsi di non inviare caratteri jolly nelle query. Dato che non stai facendo una ricerca con caratteri jolly, stai abbinando un termine di ricerca su ngrams (parti di parole).

0

Anche io stavo cercando la stessa cosa e quello che ho trovato è PrefixQuery che fornisce una combinazione di alcune cose come questo "Documento di elaborazione *". Ma la cosa è il campo che stai cercando dovrebbe essere askenizzato e memorizzarlo in minuscolo (motivo per cui dal momento che è indicizzatore non modificato non salverà i valori del campo in lettere minuscole) affinché funzioni.Ecco il codice per PrefixQuery che ha funzionato per me: -

List<SearchResult> results = new List<SearchResult>(); 
Lucene.Net.Store.Directory searchDir = FSDirectory.GetDirectory(this._indexLocation, false); 
IndexSearcher searcher = new IndexSearcher(searchDir); 
Hits hits; 

BooleanQuery query = new BooleanQuery(); 
query.Add(new PrefixQuery(new Term(FILE_NAME_KEY, keyWords.ToLower())), BooleanClause.Occur.MUST); 
hits = searcher.Search(query); 
this.FillResults(hits, results);