Esempio di motore di ricerca full-text in F #?
-
02-07-2019 - |
Domanda
Esistono buoni esempi (siti Web o libri) su come costruire un motore di ricerca full-text in F #?
Soluzione
Vuoi scrivere tu stesso? O hai semplicemente bisogno della funzionalità?
Se hai bisogno della funzionalità, un database incorporato / in memoria con supporto per la ricerca full-text potrebbe fare il trucco. Dal momento che è .Net, raccomanderei provider SQLO ADO.Net come contendente open source. È davvero buono (supporta LINQ prima di qualsiasi altro provider là fuori, supporto in fase di progettazione, ecc.) E il supporto FTS è in fase di sviluppo molto attivo. Penso che Google ci stia lavorando. Esiste anche Database VistaDB . Lo sto usando principalmente ora. Dovrebbe avere il supporto FTS. Interamente .Net, che offre alcuni vantaggi di integrazione.
Se devi farlo da solo, consulta i libri su Recupero informazioni . Ne ho letti alcuni, ma non so nulla che si distingua dalla folla. Amazon potrebbe aiutarti lì.
Altri suggerimenti
Ho scritto un motore di ricerca in F # usando solo poche righe di codice. Puoi leggerlo nel mio poster e accedi alla piena implementazione in
L'idea di base è mostrata nel codice seguente, ma in realtà sono necessarie più spiegazioni del codice stesso. Questi sono disponibili anche sul mio sito Web.
Questo codice crea l'indice sul disco di una raccolta di documenti. L'indicizzazione viene eseguita nella memoria esterna.
1. let create_postings in_name tmp_dir out_name = 2. let process_doc (doc_id, doc_text) = 3. doc_text |> tokenize |> stopword |> stem 4a. |> List.count 4b. |> ListExt.map(fun (word, tf) -> (word, (doc_id, tf)) 5. in_name 6. |> as_lines 7. |> Seq.map_concat extract_docs 8. |> Seq.map_concat process_doc 9a. |> External.group_by (fun (w, _) -> w) 9b. (fun (_, docid_and_tf) -> docid_and_tf) 9c. (fun lst -> (List.length lst, lst)) 9d. tmp_dir 9e. (External.ElemDesc()) 10. |> output out_name