In Solr (3.3), è possibile rendere un campo lettera per lettera ricercabile tramite un EdgeNGramFilterFactory
e anche per le query a frase?Solr: query a frase esatta con EdgeNGramFilterFactory
Per esempio, io sono alla ricerca di un campo che, se contenente "contrat informatique", verrà trovato se l'utente digita:
- Contrat
- informatique
- contr
- Informa
- "contrat informatique"
- "info contrat"
Attualmente, ho fatto qualcosa di simile:
<fieldtype name="terms" class="solr.TextField">
<analyzer type="index">
<charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt"/>
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1"/>
<tokenizer class="solr.LowerCaseTokenizerFactory"/>
<filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="15" side="front"/>
</analyzer>
<analyzer type="query">
<charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt"/>
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1"/>
<tokenizer class="solr.LowerCaseTokenizerFactory"/>
</analyzer>
</fieldtype>
... ma è venuto a mancare su query frase.
Quando mi guardo allo analizzatore schema in solr admin, trovo che "contrat informatique" ha generato i token seguenti:
[...] contr contra contrat in inf info infor inform [...]
Quindi la query funziona con "contratto in" (token consecutivi), ma non "contrat inf" (perché questi due token sono separati).
Sono abbastanza sicuro che qualsiasi tipo di derivazione possa funzionare con le query a frase, ma non riesco a trovare il giusto tokenizzatore del filtro da usare prima dello EdgeNGramFilterFactory
.
Ciao, Xavier. Per favore, puoi spiegare come hai trasformato "cont info" in + cont + info? C'è qualche classe di utilizzo fuori dalla scatola per questo? Oppure è sufficiente identificare le doppie quotazioni e trasformarle manualmente? Sto cercando di risolvere questo: http: // StackOverflow.it/questions/37033381/solr-search-field-best-practice – wattale
Si trattava di un'operazione manuale, alla ricerca di doppie quotazioni e aggiunta del segno più. Non ho trovato nulla che potesse automatizzare questo per me: -/ –
Grazie per la risposta xavier, anche per me dopo aver strisciato così tanto contenuto non ho potuto trovare una soluzione pronta per l'uso. Ho pensato di reinventare la ruota facendo questo manualmente. Ma immagino che farlo manualmente sia l'unica opzione disponibile: | – wattale