zoukankan      html  css  js  c++  java
  • Spring.net整合Lucene.net 实现全文检索(附例程)

    什么是Lucene.net?

    引用wikipedia上的介绍:“Lucene是一套用于全文检索和搜尋的開放源碼程式庫,由Apache软件基金会支持和提供。Lucene提供了一個簡單卻強大的應用程式介面,能夠做全文索引和搜尋...”

    而Lucene.net便是Lucene在dot net平台上的移植版本。关于Lucene的一些概念,有兴趣的朋友可以参考这里

    要实现Spring.net与Lucene.net的整合,关键点在于:

    1、查询时,使用Spring.net集成的nHibernate来管理Lucene.net使用的Session;

    2、对数据实体的CRUD进行事件监控,以便动态更新索引

    经过一番尝试,决定将原有的框架进行升级——spring.net 1.2.0 + nHibernaet 2.0.1 + Lucene.net 2.0 + nHibernate.Search。

    ok,看看都需要进行哪些调整:

    一、实体生成模板加上索引

    在model层引用nHibernate.Search程序集,它的作用是根据实体上的元标记,选择是否为实体开启存储空间,以及索引的字段范围。

    修改codeSmith中的nHibernate Template,像这样,用以将主键和字符型字段进行索引:

    NHibernate.class.cst

    在例程包中的“其他”目录中,有完整的生成模板。

    二、集成环境配置

    修改web.config,进行Spring.net和nHibernate.Search的配置: 

    web.config

     此处的"hibernate.search.default.indexBase"值"~/Index"可以更改为您希望的目录名称。这里的意义在于,当监控到数据变化时,会将索引变化写入到"~/Index/实体名/“。

    在nHibernate 2.0中,加入了对数据库事件的监控,在配置文件中,给集成环境中的SessionFactory加上"EventListeners" 属性,便可轻松捕捉到诸如Insert、Update、Delete等事件,交由nHibernate.Search进行索引处理:  


    appDaoContext.xml

    三、全文搜索

    给数据访问模板DaoTemplate添加一个全文搜索的方法:

    /// <summary>
            
    /// 全文检索
            
    /// </summary>
            
    /// <typeparam name="T">类型</typeparam>
            
    /// <param name="query">关键词</param>
            
    /// <returns></returns>

            IList FullTextSearch(string query)


    四、运行一下

    Insert对象:

     

     Search:

     

    随笔写得很粗糙,大部分细节在附件的例程包中(包括数据库备份,模板,项目文件),如果有兴趣,还是参考实例吧:

    lucenedemo.rar 

    Creative Commons License
    本作品采用知识共享署名-非商业性使用-相同方式共享 3.0 Unported许可协议
    欢迎转载,但必须保留文章的署名老莫的帐本子
    并保留此链接:http://moye.cnblogs.com/
    如有疑问请发邮件:moyerock@gmail.com
  • 相关阅读:
    HTML5智能表单
    HTML表单
    CSS文档统筹
    二分查找/折半查找(C++实现)
    实验6:Problem H: 字符串类(II)
    实验6:Problem G: 字符串类(I)
    实验6:Problem F: 时间和日期类(IV)
    实验6:Problem E: 时间和日期类(III)
    实验6:Problem D: 时间和日期类(II)
    实验6:Problem C: 时间和日期类(I)
  • 原文地址:https://www.cnblogs.com/moye/p/1599156.html
Copyright © 2011-2022 走看看