F#中的全文搜索引擎示例?

时间:2008-09-25 09:34:36

标签: f# functional-programming full-text-search

关于如何在F#中构建全文搜索引擎,是否有任何好的例子(网站或书籍)?

2 个答案:

答案 0 :(得分:1)

你想自己写吗?或者你只需​​要这个功能吗?

如果您需要该功能,可以使用支持全文搜索的嵌入式/内存数据库。由于它是.Net,我建议SQLite ADO.Net Provider作为开源竞争者。这非常好(在任何其他提供商之前支持LI​​NQ,设计时支持等),并且FTS支持正在非常积极的开发中。我认为谷歌正在努力。还有VistaDB Database。我现在主要使用它。它应该有FTS支持。完全.Net,它给它一些集成优势。

如果您必须自己查看Information Retrieval上的图书。我已经阅读了一些,但不知道从人群中脱颖而出。亚马逊可能会帮助那里。

答案 1 :(得分:1)

我用F#编写了一个搜索引擎 代码您可以在我的海报中阅读相关内容 并访问

中的完整实现

Stefan Savev's home page

基本思想如下面的代码所示,但实际上需要比代码本身更多的解释。这些也可以在我的网站上找到。

此代码在磁盘上创建文档集合的索引。 索引在外部存储器中完成。

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