Fork me on GitHub
SearchEasy SearchEngine Framework(搜易SDK) 开源

一,搜易SDK是神马东东

     搜易SDK(SearchEasy SearchEngine Framework),是基于Lucene.net 2.0 开发的全文搜索二次开发框架,我们对Lucene.net 2.0进行了适当的优化和扩展,针对中文搜索的特点,完全整合了我们独立开发的中文分词系统,可以说,搜易SDK是一个对Lucene.net 2.0进行中文化深度封装的二次开发框架,目的是给Lucene.net 2.0应用开发者更好地,更优雅地使用Lucene.net提供一个现成或者可参考的完整封装开发包,同时搜易SDK使用了我们日常构建搜索所用到的Lucene.net的基本特性,可以给Lucene.net学习者提供一个相对完整的参考。

      搜易SDK参照Lucene结构,分别对索引,搜索,分词等基本功能进行了扩展和封装,本文仅仅对这个开源项目做一个简要的介绍,下一步对照源代码的设计意图来讲解API,如果你等不及了,可以先自行下载研读SDK项目源代码。

二,搜易SDK开发三部曲

     这是一个简单的例子,仅用三步就可以开发一个站内搜索引擎了,用以演示搜易SDK的基本使用,其实复杂的应用,基本也就是三个步骤了。对于有Lucene使用经验的开发者,通过下述的例子可以对搜易SDK有一个直观的了解,不建议大家直接拿来就套上自己的项目,建议大家先看看源代码,对搜易SDK有一个全局了解后再使用。我也会抽空写写这方面的应用文档。

第一步:编写配置文件

搜易SDK的配置文件采用类似数据结构的概念来表达。
假设需要做一个新闻的搜索引擎。新闻数据库表如下:
表名:news
字段名             类型            字段描述
newsid               int               新闻ID
title                   varchar(50)  新闻标题
content              varchar(50)  新闻内容
datecreated       datetime        添加时间

那么对应的配置文件如下:
<?xml version="1.0" encoding="utf-8" ?>
<searchengine>
  
<schemaentry name="news">
    
<indexfields>
      
<field name="newsid" indextype="untokenized" storetype="yes" valuetype="integer"/>
      
<field name="title" indextype="tokenized" storetype="yes" valuetype="string"/>
      
<field name="content" indextype="tokenized" storetype="yes" valuetype="string"/>
      
<field name="datecreated" indextype="untokenized" storetype="yes" valuetype="datetime"/>
      
<field name="views" indextype="untokenized" storetype="yes" valuetype="integer"/>
    
</indexfields>
    
<indexpaths>
      
<path name="newsindex" path="d:\\index\news\"/>
    
</indexpaths>
    
<searchfields>
      
<field>title</field>
      
<field>content</field>
    
</searchfields>
  
</schemaentry>
</searchengine>

第二步:建立索引

接上节的编写XML配置文件,并按照上述的应用场景。搜易SDK有两种方式可以创建索引:
1,方法一:
using (Indexer indexer = new Indexer("news", "newsindex"))
{
                //此部分数据从数据库读取,这里只是示范
                int newsid = 22;
                string title = "如何建立索引";
                string content = "建立索引" ;
                DateTime datecreated = DateTime.Now ;

                indexer.Add(new object[] { newsid,title,content,datecreated });
                //优化索引
                indexer.Optimize();
                //关闭索引
                indexer.Close();
}

2,方法二:
using (Indexer indexer = new Indexer("news", "newsindex"))
{
                System.Data.DataTable dt = indexer.GetEntryTableSchema() ;

                //此部分数据从数据库读取,可以循环添加多个DataRow,比如一次添加1000条记录,这样可以批量创建索引。
                System.Data.DataRow dr = dt.NewRow();
                dr["newsid"] = 22;
                dr["title"] = "如何建立索引";
                dr["content"] = "建立索引";
                dr["datecreated"] = DateTime.Now;

                dt.Rows.Add(dr) ;
                indexer.Add(dt) ;
                //优化索引
                indexer.Optimize();
                //关闭索引
                indexer.Close();
}
当然了,具体到实际的应用,创建索引的代码可能没有那么简单,比如如何高效地从数据库分页读取数据,作业系统定时自动索引等等业务逻辑代码依然是需要SDK的使用者自己去设计开发的。

第三步:执行搜索
建立索引后,就可以开始执行搜索了:
我们在上节建立索引的基础上执行搜索:
            Searcher searcher = new Searcher("news") ;

            //常规搜索
            SearchResult result = searcher.Search("关键词") ;

            //在结果中搜索
            SearchResult result = searcher.SearchInResult("关键词") ;

            //指定pageIndex表示返回搜索结果的第pageIndex页结果
            SearchResult result = searcher.Search("关键词", pageIndex) ;


使用搜易SDK构建搜索引擎就那么简单的拉

三,搜易SDK的项目结构
   本节将对搜易SDK源代码的项目结构做一个简要的介绍,帮助大家更好地了解这个开源的搜索项目
   

SearchEasy.SearchEngine.Addins 插件机制 未完成
SearchEasy.SearchEngine.Analysis 词语分析  
SearchEasy.SearchEngine.Distributed 分布式服务 未完成
SearchEasy.SearchEngine.Index 索引服务  
SearchEasy.SearchEngine.Schema 配置架构  
SearchEasy.SearchEngine.Search 搜索服务  
SearchEasy.SearchEngine.Utils 辅助代码  
SearchEasy.WordSegment 中文分词  

其中中文分词,使用了SQLite作为词库存储数据库,如果不想使用SQLite或者对词库存放路径有困惑,请参阅SearchEasy.WordSegment.CoreDictionary类代码,根据自身需要修改相应代码为你希望的模式。

四,搜易SDK的意义
   搜易SDK(SearchEasy SearchEngine Framework)是对Lucene.net进行深度封装而成的二次开发包,我们的目的是希望通过深度封装降低使用Lucene.net的难度,但不可否认的是,基于这个框架开发站内搜索等搜索应用,依然是有一定门槛的,比如开发者必须自己解决数据库的增量读取,自动更新索引的作业系统等等。

五,搜易SDK源代码下载 
   源代码下载地址:https://files.cnblogs.com/kwklover/SearchEasy.SearchEngine.rar
   官方交流论坛:http://www.searcheasy.net


六,搜易软件的使命
   搜易SDK的开源发布是我们对开源社区的一种感恩式的回报,取自开源社区,回到开源社区,但开源发布搜易SDK并非我们的根本目的,我们的使命正如我们的名字一样:搜易--让搜索更容易!
    我们仍将朝着自己的目标继续努力,现在我们正在开发的一个产品,是基于搜易SDK而开发的站内全文搜索引擎,我们的目标是希望用户通过点点鼠标操作GUI就能实现大部分的功能,仅在需要搜索的地方编写少量代码即可。

六,搜易站内搜索引擎预览图

这个是目前正在开发中的基于搜易SDK开发的站内引擎软件界面,使用这个软件,就无需编写麻烦的配置文件,无需自己编写定时索引作业程序....。目前完成度大概95%,但是什么时候发布,取决与大家对搜易SDK的认可程度,我们开源的另外一层期望,是希望大家在自己的项目中使用搜易SDK,反馈bug,以便我们完善这个搜易SDK,毕竟GUI界面只是辅助工具,基础不牢,GUI再漂亮,再好用也是白搭的。秀一秀,让大家有个期待。。。呵呵

 
分类: 搜易SDK
posted on 2012-10-29 14:37  HackerVirus  阅读(330)  评论(0编辑  收藏  举报