• 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
  • 相关阅读:
    C#基础篇——泛型
    基于.NetCore3.1系列 —— 使用Swagger导出文档 (补充篇)
    基于.NetCore3.1系列 —— 使用Swagger导出文档 (番外篇)
    springboot深入浅出系列(16章97节)-看了都说好
    小书MybatisPlus第5篇-Active Record模式精讲
    小书MybatisPlus第4篇-表格分页与下拉分页查询
    使用位运算、值交换等方式反转java字符串-共四种方法
    有效提高java编程安全性的12条黄金法则
    小书MybatisPlus第3篇-自定义SQL
    结合SpEL使用@Value-基于配置文件或非配置的文件的值注入-Spring Boot
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/2744720.html
Copyright © 2020-2023  润新知