2010-06-21 12 views
7

Non riesco a capire come trovare le corrispondenze di sottostringa con SOLR, ho trovato le corrispondenze basate su un prefisso in modo da ottenere il prosciutto per abbinare l'hamburger.Corrispondenze con sottostringa all'interno di SOLR

Come posso ottenere una ricerca di "hamburger" per abbinare anche l'hamburger? Ho provato burger ma questo ha gettato un errore '*' o '?' non consentito come primo carattere in WildcardQuery.

Come posso abbinare sottostringhe utilizzando SOLR?

+0

Sareste così gentile da inviare il codice per come avete fatto la partita del prefisso? – Roman

risposta

3

È possibile abilitare questa opzione ma sarà molto affamata di risorse (ad esempio, cercare SuffixQuery).

Vedi: http://lucene.472066.n3.nabble.com/Leading-Wildcard-Search-td522362.html

Citando il mailing list: arounds di lavoro? Immagina di creare un secondo indice (o di aggiungere un altro campo) con tutti i termini scritti all'indietro.

=>

Vedere Add ReverseStringFilter https://issues.apache.org/jira/browse/LUCENE-1398

e supporto per un efficiente leader caratteri jolly di ricerca: https://issues.apache.org/jira/browse/SOLR-1321

Al momento issues.apache.org sembra giù. Prova ad usare per es. cache di Google.

3

Come indicato in precedenza in link, è possibile utilizzare i caratteri jolly principali con edismax (ExtendedDismaxQParser). Provalo solo per vedere se è abbastanza veloce.

Alcuni maggiori informazioni sul reversedstring di cui sopra può essere trovato qui: solr.ReversedWildcardFilterFactory

9

Se qualcuno finisce qui dopo la ricerca per "apachesolr sottostringa", c'è una soluzione più semplice per questo: https://drupal.stackexchange.com/a/27956/10419 (da https://drupal.stackexchange.com/questions/26024/how-can-i-make-search-with-a-substring-of-a-word)

Aggiungere ngramfilter alla definizione del tipo di testo in schema.xml nella directory solr config .

<fieldType name="text" class="solr.TextField" positionIncrementGap="100"> 
    <analyzer type="index"> 
    <filter class="solr.EdgeNGramFilterFactory" minGramSize="3" maxGramSize="25" /> 
+0

Questo mi ha perseguitato per settimane. Grazie per la pubblicazione, ha risolto il mio problema con il tentativo di filtrare/cercare in base alla sottostringa. – Genzume

+0

Questo non funzionerebbe per set di dati molto grandi. Il campo di grammatura avrà bisogno di molta memoria durante l'indicizzazione dei dati. – alpeshpandya