基于Redis与Node.js实现的全文搜索引擎 Reds
fmms
13年前
<p><span class="wp_keywordlink_affiliate">Reds</span>是由LearnBoost公司的TJ Holowaychuk开发的一个基于<a href="http://www.open-open.com/lib/view/open1324364537983.html"><span class="wp_keywordlink_affiliate">Redis</span></a>的Node.js全文搜索引擎,其代码加上注释也只有300行。不得不说又是一个Redis的最佳实践,它的主要原理是通过Redis的sets数据结构将分词后的词语碎片进行存储。这里的分词仅仅是对英文按空格进行切分(中文分词就不要想了~)。<br /> <br /> <a href="/misc/goto?guid=4958189735229147892" target="_blank"><span style="font-weight:bold;">Node.js</span></a>是一套用来编写高性能网络服务器的JavaScript工具包,一系列的变化由此开始。比较独特的是,Node.js会假设你是在POSIX环境下运行它Linux 或 Mac OS X。如果你是在Windows下,那就需要安装MinGW以获得一个仿POSIX的环境。在Node中,Http是首要的。Node为创建http服务器作了优化,所以你在网上看到的大部分示例和库都是集中在web上(http框架、模板库等)。</p> <p><img class="size-full wp-image-2678 alignnone" title="redisnodejs" alt="基于Redis与Node.js实现的全文搜索引擎 Reds" src="https://simg.open-open.com/show/46551f8e5f8c95183ad21dd28a4c4717.jpg" width="621" height="89" /></p> <p>例子:<br /> 先添加几个句子到搜索引擎中建立索引</p> <pre>var strs = []; strs.push('Tobi wants four dollars'); strs.push('Tobi only wants $4'); strs.push('Loki is really fat'); strs.push('Loki, Jane, and Tobi are ferrets'); strs.push('Manny is a cat'); strs.push('Luna is a cat'); strs.push('Mustachio is a cat'); strs.forEach(function(str, i){ search.index(str, i); });</pre> <p>然后在Tobi dollars这个组合进行搜索</p> <pre>search.query(query = 'Tobi dollars', function(err, ids){ if (err) throw err; console.log('Search results for "%s":', query); ids.forEach(function(id){ console.log(' - %s', strs[id]); }); process.exit(); });</pre> <p>下面是其搜索结果</p> <pre>Search results for "Tobi dollars": - Tobi wants four dollars</pre> <p>介绍内容来自:<a href="/misc/goto?guid=4959500173978310174" target="_blank">http://blog.nosqlfan.com/html/2676.html</a></p> <p><strong>项目主页:</strong><a href="http://www.open-open.com/lib/view/home/1325419775656" target="_blank">http://www.open-open.com/lib/view/home/1325419775656</a></p>