2013-05-20 21 views
5

Sto lavorando a una query fuzzy utilizzando Solr, che va su un repository di dati che potrebbero avere errori di ortografia o parole abbreviate. Ad esempio il repository potrebbe avere un nome con le parole "Hlth" (forma abbreviata della parola "Salute").Ricerca fuzzy in Solr

  1. Se faccio una ricerca fuzzy per Name:'Health'~0.35 Ottengo risultati con la parola 'Salute' ma non 'Hlth'.
  2. Se eseguo una ricerca fuzzy per Name:'Hlth'~0.35 ottengo record con nomi 'Salute' e 'Hlth'.

Vorrei ottenere la prima richiesta di lavoro. Nel mio caso d'uso aziendale, dovrei usare i dati puliti per interrogare tutte le parole errate o abbreviate.

Qualcuno potrebbe aiutare e chiarire perché la ricerca fuzzy n. 1 non funziona e se ci sono altri modi per ottenere lo stesso.

risposta

4

Si utilizza la query fuzzy in modo errato.

Secondo quanto Mike McCandless dicendo (http://blog.mikemccandless.com/2011/03/lucenes-fuzzyquery-is-100-times-faster.html):

FuzzyQuery corrisponde termini "vicino" a un termine base specificata: si specifica un permesso distanza massima di modifica e tutti i termini all'interno di quella distanza di modifica dalla base termine (e, quindi, i documenti che contengono quei termini) sono abbinati.

La sintassi QueryParser è il termine ~ o il termine ~ N, dove N è il massimo numero consentito di modifiche (per le release più vecchie N era un galleggiante di confusione tra 0.0 e 1.0, che si traduce in un equivalente massima di modifica distanza attraverso una formula complicata).

FuzzyQuery è grande per corrispondenza nomi propri: posso cercare mcandless ~ 1 e sarà abbinare McCandless (inserto c), mcandles (rimuovere s), mkandless (sostituire c con k) e un grande molti altri " chiudi "termini. Con max edit distance 2 è possibile avere fino a 2 inserimenti, eliminazioni o sostituzioni . Il punteggio per ogni partita si basa sulla distanza di modifica di quel termine; quindi una partita esatta è valutata più alta; modifica distanza 1, inferiore; ecc

Quindi è necessario scrivere query come questo - Salute ~ 2

+0

non funziona! Volevo abbinare Parkway con Pkwy e viceversa. Parkway ~ 2 partite solo Parkway e Pkwy ~ 2 partite solo Pkwy –

+0

@Mysterion: FuzzyQuery non funziona perché? ha provato = "who is johnn" ~ 0.2 – iNikkz

2

Lei scrive: "Ho voluto abbinare Parkway con Pkwy"

Parkway e Pkwy hanno una distanza di modifica di 3. È possibile ottenere ciò inserendo "~ 3" per "~ 2" dalla prima risposta, ma la corrispondenza fuzzy Solr non è consigliata per valori superiori a 2 per motivi di prestazioni.

Penso che il modo migliore per affrontare il problema sarebbe quello di generare un dizionario specifico per il contesto di sinonimi e fare un'espansione query-time.