这是一个研究性的解决方案,下面对其中的项目做下简单的介绍:

1>Lucene.Net.Analysis.SharpICTCLASAnalyzer//来自博客园

2>Lucene.Net.Analysis.SimpleSplitAnalyzer//来自博客园,如果作者发现了是他的,可以联系我.

这两个项目,如果你有接触过的话,看到项目名称就知道这两个都是Lucene.Net.Analysis.Analyzer的派生类了.和Lucene自带的分析器只是具体的实现不一样,如果有童鞋问Analyzer是干啥的,那我只能建议从度娘上百度一下Lucene了..

不过有些刚接触的童鞋可能对SimpleSplitAnalyzer有些疑问,这个分析器有时很有用,因为

我们在分词的时候,为了提高分词速度,针对不同的数据,会选择不同的分词器,有些特殊的数据,可能本来就是我们自己设置的规则,比如用分号隔开,用Split处理后的每一项都是一项有意义的数据,再分反而没有意义了.这时候,咱们这个简单高效的分析器就派上大用场了。

3>PreProcessUtility项目,来自吕震宇老师的SharpICTCLAS1.0,可以根据应用从场景进行一些预处理,比如繁体子处理,去HTML之类的..

4>SharpICTCLAS项目,是吕震宇老师幸苦的结晶,这里再次感谢他..当然我们也不能忘了原作者,中科院的张华平博士了

5>Lucene.Net.ApplyBase项目,我设计它作为搜索方案处理的基类,为啥呢,因为刚开始,我一股脑的写在一起,虽然是个研究或学习性的项目,但后来发现,如果要实现百度首页新闻,网页,贴吧,知道,文库……这种多类型多来源的搜索就顿时傻了。于是乎,干脆把我在Test项目中需要的索引创建,维护,搜索等一般性的流程封装到一系列的基类中.之后遇到新闻,网页,贴吧之类的异构数据,只需要分别实现了。

这个项目比较关键,先看一下图::

5.1>Token.下的PerFieldAnalyzerWrapperConfigBase主要是用来处理一个搜索方案中,不同Field上的不同分词处理.  毕竟很多时候,既然可以优化一下,当然去优化了。否则图个方便省事,性能就如蜗牛了.

TokenTools显然用于分词了,这里通过调用前辈们研究出来的分词器,轻易的完成分词工作。我们知道我们的搜索即可以调用或者组合针对性的query派生类,也可以去构建类似于数据库中t-sql查询语句去搜索,让lucene去分析并处理.  而TokenTools在期间起着首当其冲的辅助作用。没有它,我试验中,搜索经常搜不到预期的内容。

5.2>Searchers空间下的SearcherBase,主要提供常用的搜索方法,尤其其中有几个搜索结果转化的抽象方法,比如:

protected abstract void SaveSearchResult(Hits resultHits);

protected abstract void SaveSearchResult(ScoreDoc[] docs, IndexSearcher indexSearch, bool CloseSearchBeforeReturn);

protected abstract void SaveSearchResult(TopDocs topDocs);

有了结果转化的方案,再看一下最简单的Term搜索

public virtual void SearchByTerm(string indexDir, string word, string queryFieldName) {

IndexSearcher indexSearcher = new IndexSearcher(indexDir);

Term t = new Term(queryFieldName, word);

Query query = new TermQuery(t);

Hits resultHits = indexSearcher.Search(query);

SaveSearchResult(resultHits);//这里就把搜索结果给保存下来了,至于如何处理,那就不是这里该讨论的问题了。

CloseIndexSearch(indexSearcher);

}

5.3Indexer空间下IndexerEngine我设计它来完成创建,覆盖索引这些基础性的工作

IndexerManagerBase则是一个抽象类,考虑到我们的索引创建完了,随着服务的运营,数据不断地产生,索引当然也要不断的维护,更新了。比如增加,修改,删除,目前我参考了很多网友的资料,修改其实就是先删除再增加。

5.4ExcuteReport空间下的ExcuteReportStruct是我用来作为执行进度的状态报告对象,因为测试项目是个桌面程序,索引创建,管理这些有时在子线程完成的,为了在UI中看到进度就设计了这个东东了,之前因为看不到进度,连撞墙的心都有了^^。

ReportManagerBase是辅助给Report对象赋值的基类,因为待我们去索引的数据可能是某个文件夹下的一堆文件,也有可能来自数据库,还有网页这些。我们需要知道进度中的总的Document数目。

5.5Documenter下DocumentManagerBase是索引创建过程中的文档过程的封装,这个应该很好处理,只要搞清了每个Field在应用中的具体定位就差不多了,当然我们也不要忘记了文档的评分处理了,不然以后的搜索结果呈现出来,咱们感觉和没有搜索那不一样吗,哈哈。

5.6Booster. BoosterBase这块当然是对Field评分的处理基类.

6>Lucene.Net.PMLucene,这个没什么说的,其实就是派生于Lucene.Net.ApplyBase,是一种具体的应用实现

7>Test项目当然是测试项目了,这里简单实现了索引的创建,管理维护,搜索,SharpICTCLAS词典的简单维护与测试等等.

好了,明天还要上班,今天就先到这里,待完善了以后,到时发些代码上来。

转载于:https://www.cnblogs.com/taohuadaozhu/archive/2012/10/18/2730313.html

关于近期对Lucene.Net应用研究学习的总结相关推荐

  1. 全文检索技术Lucene入门和学习、与数据库数据结合的demo实现

    首先,要非常感谢 博客园的 "觉先"先生的分享, 他的博客带我进入了Lucene的大门 :http://www.cnblogs.com/forfuture1978/category ...

  2. Lucene.Net无障碍学习和使用:索引篇

    项目中可能需要再次用到Lucene.Net,利用空闲时间写了个demo,主要涉及到索引的创建.删除.更新和一个简单查询.在本文示例中,Lucene.Net的版本是2.4.0,某些类和方法与最新版本或者 ...

  3. Lucene.Net无障碍学习和使用:搜索篇

    在上一篇中,我们初步理解了索引的增删改查基本操作.本文着重介绍一下常用的搜索,以及搜索结果的排序和分页.本文的搜索主要是基于前一篇介绍的文本文件的索引,建议下载最后改进的demo对照着看阅读本文,同时 ...

  4. Lucene全文搜索学习笔记(一)

    个人笔记之用,如有错误,恳请批评指正. 什么是lucene? Lucene是apache软件基金会发布的一个开放源代码的全文检索引擎工具包,由资深全文检索专家Doug Cutting所撰写,它是一个全 ...

  5. lucene源码学习

    1.官网地址 https://lucene.apache.org/core/9_1_0/index.html 2. lucene源码结构 https://juejin.cn/post/68449037 ...

  6. lucene框架的学习

    目录 一.lucene是什么 二.lucene解决什么问题 三.lucene技术概览 3.1.lucene的架构图 3.2.lucene的相关模块 3.3.lucene的术语,常用对象 四.lucen ...

  7. 《强化学习周刊》第16期:多智能体强化学习的最新研究与应用

    No.16 智源社区 强化学习组 强 化 学  习 研究 观点 资源 活动 关于周刊 强化学习作为人工智能领域研究热点之一,多智能强化学习的研究进展与成果也引发了众多关注.为帮助研究与工程人员了解该领 ...

  8. 「智源论坛Live报名」清华大学董胤蓬:深度学习对抗攻防平台

    直播时间: 2020年2月25日19:30-20:30 报名方式见文末 最新一期的智源论坛Live,我们请来了上个月刚刚获得了"百度奖学金"的董胤蓬同学: 嘉宾介绍 董胤蓬,清华大 ...

  9. 揭秘深度学习成功的数学原因:从全局最优性到学习表征不变性

    来源:机器之心 本文长度为4900字,建议阅读7分钟 本文为深层网络的若干属性,如全局最优性.几何稳定性.学习表征不变性,提供了一个数学证明. 近年来,深度学习大获成功,尤其是卷积神经网络(CNN)在 ...

最新文章

  1. JAVA RPC:从上手到爱不释手
  2. SpringMVC教程--Validation校验
  3. 关于springBoot post请求参数过大导致后端接收不到参数问题
  4. Java常用的八种排序算法与代码实现
  5. nodejs中的文件系统
  6. 飞鸽传书下载2013
  7. 【UML建模】UML类图几种关系的总结
  8. (83)建立时间与保持时间时序分析技巧
  9. 穷人变富的过程中,最大的阻碍是什么?
  10. spring boot 处理自定义注解
  11. python爬虫下载模块_python爬虫模块之HTML下载模块
  12. java vector编程_java中Vector实现方法和功能还有例子详细讲解一下!谢谢!
  13. CSF文件播放器处理总结
  14. java广告投放系统_广告投放系统
  15. matlab中garchred是什么意思,garch模型matlab
  16. linux上2048游戏程序,在Linux系统下完全可以玩2048游戏
  17. hp 交换机远程连接_Hp服务器 iLO3 使用方法
  18. Color Constancy Datasets
  19. 机器学习基石-05-3-Effective Number of Hypotheses
  20. 问题以及解决办法:hadoop 不在 sudoers 文件中。此事将被报告

热门文章

  1. 网络推广外包——网络推广外包网站专员如何避免“网站过度优化”
  2. 网站外链优化需要注意哪些事项?
  3. python画蝴蝶_python画蝴蝶曲线图的实例
  4. c 语言 循环队列,循环队列C语言
  5. Java多线程闲聊(二):活锁和死锁
  6. 记一次EventBus内存泄露导致的项目问题
  7. 开发日记-20190327 关键词 intant run原理
  8. python3 读取csv
  9. Ubuntu配置jdk环境变量
  10. 高级软件工程第七次作业:东理三剑客团队作业-随笔6