2010-06-30 12 views
5

Ho un problema con la punteggiatura a strisce dall'indice SOLR Quando il segno di punteggiatura segue a destra dopo una parola, questa parola non viene indicizzata correttamente.Solr: punteggiatura delle strisce prima dell'indice

Ad esempio: se indicizziamo "ciao, Giovanni", la risorsa non verrà trovata per parola chiave "ciao" mentre non ci saranno problemi se rimuoviamo virgola dopo parola "ciao".

Esiste un FilterFactory che supponga di eliminare la punteggiatura? Qualche idea?

Grazie, Bogdan.

risposta

6

Questo viene eseguito con WordDelimiterFilterFactory. Imposta generateWordParts = 1.

C'è anche il PatternTokenizerFactory che potrebbe essere utilizzato, ma non l'ho mai provato.

+0

Per le persone con casi limite come il mio: Le generateWordParts = 1 normalmente funzionare, ma se si sta facendo quello che sto facendo, non lo farà: sto usando il Attributo 'types' di WDFF da mappare. e $ a ALPHA, in modo che possa abbinare termini come '$ 10.00'. Questo ha l'effetto collaterale negativo di causare prefissi e periodi di suffisso inclusi come parte della parola. Quindi nel mio caso la risposta di @claytron potrebbe essere una soluzione migliore. –

6

È possibile utilizzare il solr.PatternReplaceFilterFactory per mettere a nudo inizio e la punteggiatura finale con questo:

<filter class="solr.PatternReplaceFilterFactory" 
    pattern="^\p{Punct}*(.*?)\p{Punct}*$" 
    replacement="$1"/> 

e se si voleva mettere a nudo tutta la punteggiatura, all'inizio e alla fine, tranne che (per esempio) il dollaro-segno di fronte di una parola, è possibile utilizzare questo:

<filter class="solr.PatternReplaceFilterFactory" 
    pattern="^[\p{Punct}&&[^$]]*(.*?)\p{Punct}*$" 
    replacement="$1"/> 
+0

Credo che la modifica di Mason abbia modificato questa risposta in modo troppo radicale. Avrebbe dovuto aggiungere un'altra risposta. – CorayThan

+0

@CorayThan Com'è troppo radicale di un cambiamento? Ho modificato leggermente la regex sulla risposta originale di claytron poiché catturare la punteggiatura solo per buttarla via dopo non è necessaria, e poi ho aggiunto un esempio su come modificare ulteriormente la regex se si desidera eliminare tutti i segni di punteggiatura ECCETTO per un carattere specifico ... qualcosa potrebbe essere piuttosto utile. Né mi sembra una risposta completamente diversa, quindi non mi sembra giusto postarla come tale. –

0

usa PatternReplaceFilterFactory

<!-- remove punctuation --> 
    <filter class="solr.PatternReplaceFilterFactory" pattern="^(\p{Punct}*)(.*?)(\p{Punct}*)$" replacement="$2"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
<filter class="solr.StandardFilterFactory"/> 
    <filter class="solr.RemoveDuplicatesTokenFilterFactory"/> 
    </analyzer> 

...

Problemi correlati