Lucene是什么???
Lucene是一个全文检索的框架,所以呢我们先来了解一下什么是全文检索。
全文检索又叫做全文搜索,他首先是一种搜索。大家来思考一下,我们在平时使用电脑时,哪些地方用到过搜索。这里单指普通的搜索,还不是全文检索。
例如:
搜索引擎
eclipse帮助等等
全文搜索是什么?
从全文数据中进行检索就叫全文检索(全文搜索)。是基于文本的搜索。
结构化数据:指具有“固定格式”或“有限长度”的数据,如数据库,元数据等;
非结构化数据:指不定长或无固定格式的数据,如邮件,word文档等;
半结构化数据,如XML,HTML等,当根据需要可按结构化数据来处理,也可抽取出纯文本按非结构化数据来处理。
全文检索的特点
相关度最高的排在最前面,官网中相关的网页排在最前面;
对摘要进行了截取;
关键词的高亮。
只关注文本,不考虑语义。
全文索引核心
全文检索主要就分为索引的建立和索引的搜索
索引的创建:首先需要找到数据库源,即待索引的文件;然后进行词法分析,即分词,去停词,去标点符号,大写变小写等,语言处理主要是针对英文,时态的转变等;这些基础处理完成后就可以按一定顺序合并相同的词后生成倒排词链表;把需要储存的文件内容放入索引库中储存同时为文档生成一个编号;最后把倒排词链表和文档的编号建立关联就OK。
索引的搜索:在获取到用户的查询语句后,同样也需要进行词法分析,语言处理,在全文检索中匹配的最小单位是词,索引索引的建立和搜索时必须使用相同的词法分析器进行分词;
Lucene中的索引维护使用IndexWriter,由这个类提供添删改相关的操作;索引的搜索则是使用IndexSearcher进行索引的搜索
步骤:
1、 把文本内容转换为Document对象
文本是作为Document对象的一个字段而存在
2、准备IndexWriter(索引写入器)
3 、通过IndexWriter,把Document添加到缓冲区并提交
addDocument
commit
close
//创建索引的数据 现在写死,以后根据实际应用场景
String doc1 = "hello world";
String doc2 = "hello java world";
String doc3 = "hello lucene world";
private String path ="F:/eclipse/workspace/lucene/index/
hello";
@Test
public void testCreate() {
try {
//2、准备IndexWriter(索引写入器)
//索引库的位置 FS fileSystem
Directory d = FSDirectory.open(Paths.get(path ));
//分词器
Analyzer analyzer = new StandardAnalyzer();
//索引写入器的配置对象
IndexWriterConfig conf = new IndexWriterConfig(analyzer);
IndexWriter indexWriter = new IndexWriter(d, conf);
System.out.println(indexWriter);
//1、 把文本内容转换为Document对象
//把文本转换为document对象
Document document1 = new Document();
//标题字段
document1.add(new TextField("title", "doc1", Store.YES));
document1.add(new TextField("content", doc1, Store.YES));
//添加document到缓冲区
indexWriter.addDocument(document1);
Document document2 = new Document();
//标题字段
document2.add(new TextField("title", "doc2", Store.YES));
document2.add(new TextField("content", doc2, Store.YES));
//添加document到缓冲区
indexWriter.addDocument(document2);
Document document3 = new Document();
//标题字段
document3.add(new TextField("title", "doc3", Store.YES));
document3.add(new TextField("content", doc3, Store.YES));
//3 、通过IndexWriter,把Document添加到缓冲区并提交
//添加document到缓冲区
indexWriter.addDocument(document3);
indexWriter.commit();
indexWriter.close();
} catch (Exception e) {
e.printStackTrace();
}
}
分词Analyzer(词法分析器)
分词,也称词法分析器(或者叫语言分析器),就是指索引中的内容按什么样的方式来建立,这在全文检索中非常关键,是按英文单词建立索引,还是按中文词意建立索引;这些需要由Analyzer来指定。
对于中文,需要采用字典分词,也叫词库分词;把中文件的词全部放置到一个词库中,按某种算法来维护词库内容;如果匹配到就切分出来成为词语。通常词库分词被认为是最理想的中文分词算法。如:“我们是中国人”,效果为:“我们”、“中国人”。(可以使用SmartChineseAnalyzer,“极易分词” MMAnalyzer ,或者是“庖丁分词”分词器、IKAnalyzer。推荐使用IKAnalyzer )