全文搜索的基础是从一串字符串中查询出一串字符。本文总结一下实现方法:
1.通过正则实现
>>> p = re.compile("abc|fuck") >>> p.findall("abcfuckselpabcdslfabceflabc") ['abc', 'fuck', 'abc', 'abc', 'abc']
2. 通过Trie树实现
Trie树,又称字典树,单词查找树或者前缀树,是一种用于快速检索的多叉树结构。
Trie一词来自retrie ve,发音为/tri:/ “tree”,也有人读为/traɪ/ “try”。
Trie树可以利用字符串的公共前缀来节约存储空间。如下图所示,该trie树用10个节点保存了6个字符串tea,ten,to,in,inn,int:
在该trie树中,字符串in,inn和int的公共前缀是“in”,因此可以只存储一份“in”以节省空间。当然,如果系统中存在大量字符串且这些字符串基本没有公共前缀,则相应的trie树将非常消耗内存,这也是trie树的一个缺点。
Trie树的基本性质可以归纳为:
(1)根节点不包含字符,除根节点意外每个节点只包含一个字符。
(2)从根节点到某一个节点,路径上经过的字符连接起来,为该节点对应的字符串。
(3)每个节点的所有子节点包含的字符串不相同。
参考:
http://dongxicheng.org/structure/trietree/
http://kingj.iteye.com/blog/1463990