随笔分类 - WEBUS
摘要:有一个大项目, 其中10个负责数据访问的service即将被淘汰, 将会替换成entity framework的方式. 这10个service一共有近130个operation. 项目中所有调用这些operation的地方都必须被替换成新的EF方式. 整个项目有47902个cs文件. 现在要做个分析, 找到所有需要修改的地方.
阅读全文
摘要:6. 搜索多个索引
为了提升性能, 我们可以从多个索引同时进行搜索, Webus.Search.MultiSearcher提供了相关功能:
public MultiSearcher(ISearcher[] searchers) {...}
我们将多个ISearcher对象传入MultiSearcher, 就可以像操作一个ISearcher对象那样进行搜索了.
阅读全文
摘要:使用OUTLOOK, 你有没有遇到过上图的问题? 多达18419封邮件! 太多了, 每次想找一个邮件都非常耗时, 想办法解决这个问题成了一件非常紧迫的事情. 利用MS Search当然可以, 但是它太heavy了, 而且不支持如逻辑搜索表达式等复杂查找功能, 怎么办? 幸运的是我有WEBUS2.0 SDK, 于是我决定自己开发一个名为Outlook Searcher (Outlook搜索精灵) 的小工具.
阅读全文
摘要:3. 评分机制 (Webus.Search.IHitScorer)
IndexSearcher在完成搜索之后会利用Webus.Search.IHitScorer来对结果进行评分.
namespace Webus.Search
{
public interface IHitsScorer
{
void Score(Hits hits, Query query);
}
}
在进行评分时, 我们主要参考结果集hits, 同时也要参考用于搜索的query对象, 从而可以根据用户的原始查询需求来设定每个结果的权重.
阅读全文
摘要:2. 使用Query
Query是所有查询的基类, 它一共有如下7种实现, 这些实现都在Webus.Search.Queries命名空间下面:
类型 描述 范例
TermQuery 字段关键词查询, 提供字段名和关键词即可进行查询.
//查找所有名字为"张三"的记录
new TermQuery("Name", "张三");
阅读全文
摘要:1. IQueriable中内置的搜索功能
在Webus.Index.IQueriable中内置了一些基本的搜索功能:
public interface IQueriable
{
Document SelectDoc(); //获取第一个Document对象, 作为样本
List SelectDoc(int[] docIds); //根据docId获取Document
List SelectIndex(string fieldname, string keyword, int length); //在指定字段中根据关键词搜索, 只返回指定长度的数据
List SelectPostfixKeyword(string postfix); //搜索满足后缀条件的关键词
List SelectPrefixKeyword(string prefix); //搜索满足前缀条件的关键词
阅读全文
摘要:最近由于工作的需要, 要分析大量C#代码, 在数万个cs文件中搜索特定关键词. 这是一项非常耗时的工作, 用Notepad++要运行接近半个小时. 于是我利用WEBUS2.0 SDK创建了一个代码搜索器程序, 非常方便的完成了这项工作.
阅读全文
摘要:3. 添加、删除、撤销删除和修改文档
在WEBUS中要将文档添加到索引中,有且仅有一种方法:
//Create a document
Document doc = new Document();
doc.Fields.Add(new Field("Title", title, FieldAttributes.Index));
doc.Fields.Add(new Field("Html", html, FieldAttributes.Index | FieldAttributes.Analyse));
doc.Fields.Add(new Field("Url", url, FieldAttributes.Sort));
//Add doc to index
IIndexable writer = new IndexManager();
writer.Add(doc);
如果要删除一个文档,可以通过以下两种方式:
阅读全文
摘要:通过前一篇文章,我们知道了WEBUS的索引数据都在一个虚拟的目录(IDirectory)中得以保存。本篇将继续前文,详细解析索引中的数据类型。
为了同时实现关键词搜索和范围搜索,WEBUS的索引采取了“主索引(Master Index)+序列(Sequence)”的方式进行组织...
阅读全文
摘要:WEBUS的索引数据全部保存在一种抽象的目录结构中,它既支持实际物理目录,也支持以流(System.IO.Stream)作为数据载体的逻辑目录...物理目录, 逻辑目录, 逻辑流...
阅读全文
摘要:当索引建好之后,要利用WEBUS2.0实现基本搜索功能,至少需要用到如下几个类和接口:
Webus.Index.IQueriable (接口)
Webus.Index.IndexManager (类,实现IQueriable)...
阅读全文
摘要:WEBUS2.0只能够将一种Document数据类型(Webus.Index.Document类)添加到索引中,所有其他类型的数据(如txt、html、word、pdf等等)都需要预先转换成Document才能够对其编制索引...
阅读全文
摘要:作为程序员,真的很快乐。不用太多happy活动,闲下来写一些自己感兴趣的代码,就足以自娱自乐了。WEBUS就是这样的代码,自从两年前开始研究搜索引擎技术,它就开始伴我度过无数个闲暇时光,而今已经开发到2.0版本了。最近闲逛到好友zhuweisky的博客,看到他早期的一篇文章,说到每个优秀的程序员应该积累一套自己的类库,使我颇受鼓舞。回想我们共事时的点点滴滴已经感慨万千,没有想到现在他的文字依旧能够给我如此触动,让我决定继续我的代码,分享我的快乐。WEBUS2.0 Search Engine SDK 简介用.Net开发搜索引擎系统,我们可以选择Lucene.Net,不过我不习惯里面的Coding
阅读全文