设为首页 收藏本站
查看: 666|回复: 0

[经验分享] apache lucene 结构和主要的类

[复制链接]

尚未签到

发表于 2017-1-7 08:34:07 | 显示全部楼层 |阅读模式
Apache lucene提供的功能大体可以看作是给一些资料建成索引, 再根据搜索词搜索出资料中一些内容。 当中的类主要分为建索引和搜索两种。

DSC0000.gif

一、建索引
建索引的过程为: 输入一串源字符串, 经过Analyzer分词处理,生成Document, 其中各Field要索引的索引, 要存储的存储, 最终通过IndexWriter写入内存或磁盘。

写入相关:同

  • 1.IndexWriter 主要是写索引,
  • 2.Directory类分为FSDirectory和RAMDirectory。
  • 3.Document 一个文档,是多个字段的集合,可以看作是数据库的一条记录,组合成Segment, document先在内存中保存一定的条数, 到了加入到Segment,多个Segment有个MaxMerge, 到达这个数时合并成新的一个.  Segment中Document有最多条数, 一般是Integer.MAX_VALUE
  • 4.Field 具体字段, Store, Index[NO_NORMS, NO, UN_TOKENIZED, TOKENIZED], 可能设置权值,以便搜索时排在前面。
  • 5.Analyzer分析器, 含Filter, Tokoner, 主要的功能是按一定的规则进行分词、去除StopWord使输入串成一个个单词组


二、搜索索引
搜索的过程是:输入搜索词, 通过Analyzer处理, 再通过Parser组合成基本TermQuery搜索项。 最终通过IndexSearch的search(query),搜索出Document集合。

搜索相关的:

  • 1.IndexSearcher  以只读的方式找开索引来搜索,(新的内容可以通过reopen)
  • indexSearcher.search(query, filter, sort)
  • 2.Term:搜索的基本单元, 一般与TermQuery相关, Term[key, content]
  • 3.Query: TermQuery, BooleanQuery, PhraseQuery, PrefixQuery, PhrasePrefixQuery,
  •           RangeQuery, FilterQuery, WildcardQuery
  • 4.  Filter  要查询时做预处理, 并不是对结果集进行过滤。资源消耗比较大的
  • 5.  Sort   排序, 对结果进行排序
  • 5.  Hits, hits.doc(i)



IndexReader
索引更新采用先根据IndexReader.deleteDocuments删除,然后再用IndexWriter.addDocument增加.

三、注意点:

  • 1. 对于大数据量的建索引, 可以分多线程, 先RAMDirectory再到FSDirectory
  • 2. 选择合适的分词器, 对于索引时间和索引大小都有很大的影响
  • 3. 对于搜索我们可以缓存一些结果或者是Query, 以便不搜索索引或解析特别是于RangeQuery解析,对整个索引记录标记是特别耗时的。
  • 4. 索引写的时候可以同时索引(写时在文件目录生成一个锁文件), 写完索引搜索不出来新加入的问题的, 要Indexsearch.reopen
  • 5. 搜索时多个条件时一般都是BooleanQuery来组合TermQuery

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-324889-1-1.html 上篇帖子: Apache james mailserver + Claros inTouch webmail 下篇帖子: apache防盗链(mod_perl试用二)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表