Exemple de moteur de recherche de texte intégral en F #?
-
02-07-2019 - |
Question
Existe-t-il de bons exemples (sites Web ou livres) sur la manière de créer un moteur de recherche en texte intégral en F #?
La solution
Voulez-vous écrire vous-même? Ou avez-vous simplement besoin de cette fonctionnalité?
Si vous avez besoin de cette fonctionnalité, une base de données intégrée / en mémoire avec prise en charge de la recherche en texte intégral peut faire l'affaire. Puisqu'il s'agisse de .Net, je recommanderais le fournisseur SQLite ADO.Net en tant que concurrent open-source. C'est vraiment bien (supportez LINQ avant tout autre fournisseur, support au moment du design, etc.), et le support FTS est en développement très actif. Je pense que Google travaille sur cela. Il existe également une base de données VistaDB . Je l'utilise principalement maintenant. Il devrait avoir un support FTS. Entièrement .Net, ce qui lui confère certains avantages en termes d'intégration.
Si vous devez le faire vous-même, consultez la recherche d'informations . J'en ai lu quelques-unes, mais je ne connais rien qui se démarque de la foule. Amazon pourrait y aider.
Autres conseils
J'ai écrit un moteur de recherche en fa # en utilisant seulement quelques lignes de code. Vous pouvez lire à ce sujet dans mon affiche et accéder à la mise en œuvre complète dans
page d'accueil de Stefan Savev
L'idée de base est illustrée dans le code ci-dessous, mais il faut davantage d'explications que le code lui-même. Celles-ci sont également disponibles sur mon site Web.
Ce code crée l'index sur le disque d'une collection de documents. L'indexation est effectuée dans la mémoire externe.
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