好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

SearchEasy SearchEngine Framework(搜易SDK) 开源

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

作者: Leo_wl

    

出处: http://www.cnblogs.com/Leo_wl/

    

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

版权信息

查看更多关于SearchEasy SearchEngine Framework(搜易SDK) 开源的详细内容...

  阅读:56次