初学lucene-菜鸟篇
来源:互联网 发布:京东数据分析笔试 编辑:程序博客网 时间:2024/04/26 00:44
初次接触搜索,查了很多资料后,出现最多的一个关键词就是lucene,于是就去稍微看了一些,然后把一些基本的内容记录下来,方便以后回忆,同时也分享给一样的初学者。
首先了解一下什么是全文检索
举个例子:比如我们在一个磁盘上有很多文件,而有一天我想通过关键字搜索出包含的文件。如:我们输入lucene,所有内容含有lucene的文件都会被检查出来,这就是全文检索(鄙人的个人定义)。其实,通过上述的例子,我们很容易会想到,关键字与这些文件需要建立一个相关映射。在lucene中,其实是使用了一种“倒排索引”的技术来实现的。
有了这种映射关系,我们就来看看Lucene的架构设计(下图是网上很多资料中比较通用的一张图)
我们可以看到,lucene的使用主要体系在两个步骤:
1.创建索引,通过IndexWriter对不同文件进行索引的创建,并将其保存在索引相关文件存储的位置中。
2.通过索引查询关键字相关文档。
索引的创建
首先,我们需要定义一个词法分析器
比如:“我爱我们的中国!”,如何对他拆分,扣掉停顿词的“的”,提取关键词“我”,“我们”,“中国”等,这里我们借助Analyzer来实现
Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_CURRENT);
第二步,确定索引文件存储位置
1 本地文件存储
Directory directory = FSDirectory.open("/tmp/testindex");
2 内存存储
Directory directory = new RAMDirectory();
两者按照自己需求进行选择
第三步,创建IndexWriter,进行索引文件的写入
IndexWriterConfig config = new IndexWriterConfig(Version.LUCENE_CURRENT, analyzer);IndexWriter iwriter = new IndexWriter(directory, config);
这里的IndexWriterConfig,其中包含了两个参数,第一个是目前的版本,第二个是词法分析器Analyzer。
第四步,内容提取,进行索引的存储
Document doc = new Document();String text = "This is the text to be indexed.";doc.add(new Field("fieldname", text, TextField.TYPE_STORED));iwriter.addDocument(doc);iwriter.close();
这就是索引创建的过程
关键字查询
第一步,打开存储位置
DirectoryReader ireader = DirectoryReader.open(directory);
第二步,创建搜索器
IndexSearcher isearcher = new IndexSearcher(ireader);
第三步,进行关键字查询
QueryParser parser = new QueryParser(Version.LUCENE_CURRENT, "fieldname", analyzer);Query query = parser.parse("text");ScoreDoc[] hits = isearcher.search(query, null, 1000).scoreDocs;assertEquals(1, hits.length);for (int i = 0; i < hits.length; i++) { Document hitDoc = isearcher.doc(hits[i].doc); assertEquals("This is the text to be indexed.",hitDoc.get("fieldname"));}
第四步,关闭查询器
ireader.close();directory.close();以上就是一个简单的建立索引与搜索关键字的流程。具体的demo这里就不写了。第一次写这个,所以也只是初略的讲些简单操作上的事情。希望以后能越写越好。这只是一个小小的开始。
0 0
- 初学lucene-菜鸟篇
- 初学lucene
- 菜鸟初学
- 菜鸟初学技术篇(之一)
- 【lucene初学】lucene4.2.1
- lucene 4.6.0 初学,
- Lucene初学(一)
- Lucene初学(二)
- Lucene初学Demo
- 菜鸟初学Java
- 菜鸟初学java心得
- 菜鸟初学JQuery
- 菜鸟初学JSP
- 菜鸟之 初学EJB
- 初学菜鸟来逛逛
- 菜鸟初学网络广告
- 菜鸟-,初学java者
- 一个菜鸟初学树莓派(1)
- 为什么未来是全栈工程师的世界?
- viewController的View创建
- mysql与oracle语法差异
- 正确使用 Volatile 变量
- 【BZOJ1037】[ZJOI2008]生日聚会Party【计数DP】【特殊的姿势】
- 初学lucene-菜鸟篇
- 深度学习(Deep Learning)综述
- 字符串问题
- 归并排序求逆序对数
- day04 onsubmit事件 XML的简介,语法,DTD约束和解析
- 1640: [Usaco2007 Nov]Best Cow Line 队列变换|后缀数组|贪心
- 一个简单的例子说明stable marriage稳定婚姻匹配问题
- 2015-03-22 网易笔试(数据挖掘方向)——邮件事业部
- 程序员求职,有时与能力无关