2012-04-27 7 views
8

Ho due documenti e utilizzo Luke per indagare, ho confermato in codice che ha lo stesso comportamento, usando StandardAnalyzer.Lucene. Net Non funziona quando si utilizza * jolly

Documento uno con boost 1

stored/uncompressed,indexed,tokenized<Description:Nummer ett> 
stored/uncompressed,indexed,tokenized<Id:2> 
stored/uncompressed,indexed,tokenized<Name:Apa> 

documento fronte con boost 2

stored/uncompressed,indexed,tokenized<Description:Nummer två> 
stored/uncompressed,indexed,tokenized<Id:1> 
stored/uncompressed,indexed,tokenized<Name:Apa> 

Cerca APA nel campo Nome ritorni con boost utilizzato e nell'ordine corretto.

Document 2 has Score 1,1891 
Document 1 has Score 0.5945 

ricerca Ap * Il rendimento in nessun ordine e stesso punteggio

Document 1 Score 1.0000 
Document 2 Score 1.0000 

ricerca apa * Il rendimento in nessun ordine e stesso punteggio

Document 1 Score 1.0000 
Document 2 Score 1.0000 

perché è questo? Vorrei restituire alcuni documenti con un valore di boost più alto anche se devo usare caratteri jolly. È possibile?

Applausi tutti i codificatori freddi là fuori!

Questo è ciò che voglio complice.

Una stringa di ricerca e le corrispondenze desiderate. Utilizzo di caratteri jolly. Ricerca "Lu" + "*"

Document 
Name 
City 

Vorrei che il documento il cui nome è Lund per ottenere rating più elevato rispetto al documento con il nome Lunt o Città è Lund, per esempio. Ciò è dovuto al fatto che saprò quali documenti sono più popolari. Voglio avere i documenti con la città di Stoccolma e nomi Stockholm e Stockholmen ma ho ordinato come ho scelto.

risposta

10

Dal WildcardQuery è una sottoclasse di MultiTermQuery hai trovato punteggio costante di 1.

Se si seleziona la definizione di t.getBoost():

t.getBoost() è una spinta tempo di ricerca del termine t nella query q come specificata nel testo della query (vedere sintassi della query) o come impostato da chiamate dell'applicazione a setBoost(). Si noti che non esiste in realtà alcuna API diretta per accedere a un incremento di un termine in una query a più termini, ma piuttosto multi termini sono rappresentati in una query come oggetti Multi TermQuery e quindi l'aumento di un termine nella query è accessibile dal chiamando il getBoost sub-query()

http://lucene.apache.org/core/old_versioned_docs/versions/3_0_1/api/core/org/apache/lucene/search/Similarity.html#formula_termBoost

una possibile hack potrebbe essere quella di impostare il metodo di riscrittura di query parser:

myCustomQueryParser.SetMultiTermRewriteMethod(MultiTermQuery.SCORING_BOOLEAN_QUERY_REWRITE) 
+0

Questa è una risposta che HA È stato molto difficile trovare sia il libro che la ricerca. Grazie, sarà molto più facile risolvere il problema sapendo come funziona. – JustusTh

+0

@JustusTh È bello sapere che ti ha aiutato. – ZeNo

+0

Ha aiutato, ma forse non fino in fondo, lavorerà su di esso. Anche se sarebbe semplice perché il mio problema è qualcosa che penso che molti vorrebbero. – JustusTh