È lucene.net/solrnet una buona soluzione per cercare un elenco di nomi con corrispondenza fuzzy? [chiuso]

1

Al momento, stiamo utilizzando la ricerca full text del server sql, ma è troppo rigida.

La cosa principale che facciamo è cercare i nomi delle persone da un database basato su una query di ricerca. Le ricerche devono essere veloci e devono essere confuse. La ricerca full text SQL non supporta in realtà la corrispondenza fuzzy, specialmente se combinata con l'opzione thesaurus. Quindi ho bisogno di una soluzione migliore.

La mia ricerca suggerisce che lucene e solr sono soluzioni aziendali ampiamente utilizzate, ma la mia ricerca suggerisce che queste sono più progettate per l'indicizzazione di cose come documenti e pagine web, o che cosa si intende per "dati non strutturati".

I nostri dati sono molto ben strutturati e quindi non sono sicuro se è adatto a questo tipo di lavoro o se dovrei indagare su un altro prodotto. Secondo il libro ho Solr 1.4 Enterprise Search Server che supporta tutto quanto sopra, eccetto per la corrispondenza del prefisso fuori dalla scatola, tuttavia afferma che ci sono problemi di prestazioni con le ricerche di sottostringa.

Pensi che solr / lucene sia una buona tecnologia da investigare per risolvere il mio problema? In caso contrario, hai un'alternativa?

Qualsiasi consiglio è benvenuto. Sono uno sviluppatore .NET, quindi solrnet piuttosto che solr.

    
posta SLC 19.12.2013 - 15:32
fonte

1 risposta

4

Ho solo esperienza con Solr e Sphinx, quindi non posso davvero paragonare troppo. E non usiamo molta ricerca "fuzzy". Ma ho lavorato molto con Solr e penso di conoscere abbastanza bene i documenti.

Prima di tutto, il termine "documento" deve essere inteso in un modo molto tecnico. In nessun modo ciò limita la ricerca ai documenti di testo tipici. Usiamo Solr per cercare prodotti dal nostro database e in questo contesto un documento è solo un flusso di dati denormalizzato che rappresenta un singolo prodotto con tutte le informazioni di testo normalmente nelle tabelle correlate direttamente allegate al documento del prodotto. Quindi qualunque cosa tu voglia cercare, se ha qualche tipo di ID univoco e descrizioni testuali (tag, categoria, assortimento, marca ...) si qualifica come documento.

Ok, torna a fuzzy. Questo tipo di ricerca è difficile, perché qui non puoi fare molto uso degli indici. Dovresti confrontare una stringa con ogni singola stringa indicizzata e calcolare un tipo di valore "distanza" e quindi selezionare una distanza massima. Solr offre Fuzzy Search e Proximity Search, ma dal momento che non lo usiamo, non posso dire quanto siano bravi. Ma come si può leggere su Internet dalla versione 4.0, Lucene usa qualcosa chiamato Levenshtein Automata che dovrebbe abilitare la ricerca fuzzy su indici molto grandi.

Forse interessante anche qui come Solr costruisce l'indice. Prima di indicizzare ogni stringa passa attraverso filtri e tokenizer. Esiste un po 'della magia e puoi influenzare strongmente la qualità dell'indice per il tuo tipo di dati. Ci sono già un sacco di filtri e Tokenizer predefiniti, ma puoi anche scriverne uno tuo. Quindi forse ci sarebbero modi per migliorare le prestazioni qui un po '.

Oltre a ciò ci sono alcune cose in cui Solr è davvero eccezionale. Ricerca principalmente sfaccettata, in cui si cerca e si conta ad esempio quanti prodotti sono in un determinato assortimento. Basta fare un elenco di tutti gli assortimenti e contare, quindi andare avanti e fare la stessa lista quasi in tempo reale insieme con un termine di ricerca. Oppure selezionare un altro aspetto (ad esempio brand = CocaCola), un termine di ricerca (q = light) e ottenere di nuovo un elenco con tutti gli assortimenti e il numero di prodotti. Questo riferimento incrociato è risultato così bello e veloce che in realtà abbiamo sostituito quasi ogni singolo elenco di prodotti SQL o cercato sul nostro sito web con query Solr.

    
risposta data 19.12.2013 - 17:45
fonte

Leggi altre domande sui tag