Ho una tabella di database piena di indirizzi dalle risposte geocode di Google Maps. Google abbrevia tutte le direzioni (West -> W, East -> E, ecc.).Fuzzy Street Address Ricerche che utilizzano MySQL Fulltext (o sphinx?)
Quindi, se inserisco un indirizzo come "100 West Pender Street", l'indirizzo formattato restituito da Google Maps è "100 W Pender St" che inserisco nella mia tabella.
Ora, se un utente arriva e ricerche per tale indirizzo, tutte le seguenti deve corrispondere:
Pender strada Pender West Street 100 Pender 100 w Pender 100 Pender ovest
e più o meno. la "w" nella tabella viene ignorata tuttavia perché scende al di sotto della lunghezza minima della parola. gli indirizzi che cadono sulla penisola est ricevono una uguale ponderazione nei risultati della ricerca (anche la "E" viene ignorata).
Qual è il modo migliore per gestire questo?
Sospetto che impostare la lunghezza minima delle parole su 1 sia una "cosa negativa".
Potrei fare una ricerca e sostituirmi con le abbreviazioni conosciute (N, E, S, W, St, Ave, Dr, ecc.) Negli indirizzi di google e sostituirle con le loro espansioni - ma ci sono alcuni nomi di strade dove questo non è valido (alcune città hanno i nomi delle singole lettere: J Street, ecc ...)
Anche indirizzi come "123 160 St" non sono ricercabili perché il numero civico (123) e il nome della via (160) entrambi cadono sotto la lunghezza minima della parola.
MySQL FullText è l'approccio giusto per questo? La Sfinge offre qualcosa di meglio?
Oppure c'è un'altra soluzione che non ho ancora considerato? Tieni presente che la query di ricerca dell'utente verrà confrontata non solo con l'indirizzo della proprietà ma anche con altre colonne di testo come il nome e la descrizione della proprietà.
È possibile ridurre la lunghezza minima del testo completo di mysql con 'ft_min_word_length', ma abbassandola a 2 o 1 si aumenterà la quantità di risultati di" disturbo ". Inoltre, fai attenzione alle abbreviazioni. Nella mia città c'è un "West Crescent", dato che era il nome di una persona, non una direzione. –
Perché non creare un nuovo campo con la direzione (N, E, W, S) e quindi cercare con ** field = 'S' ** o se le ricerche multiple utilizzano il campo IN ('S', 'N') –
Marc - Sono preoccupato per il rumore, specialmente se devo impostarlo su 1 per catturare N, E, S, W. David - gli indirizzi che tornano dal geocoder non hanno la direzione come campo separato quindi Dovrei analizzarlo dal campo di testo completo che potrebbe essere problematico per le strade che sono effettivamente denominate "N" o "E" ecc. – emh