关于Lucene的理解和使用
程序员文章站
2022-07-09 11:51:35
...
漫谈Lucene进行全文检索的步骤及简单入门应用
什么时lucene?
Lucene是简单而功能强大的基于Java的搜索库。它可以用于任何应用程序来搜索功能。 Lucene是开源项目。它是可扩展的,高性能的库用于索引和搜索几乎任何类型的文本。Lucene库提供了所需的任何搜索应用程序的核心业务。索引和搜索。简单来说就是将需要搜索的类容通过lucene创建索引库,搜索的时候去索引库里面查找。
什么叫做全文检索?
我们生活中的数据总体分为两种:一种为结构化数据,指具有固定格式或者限长的数据,比如数据库等,这种的检索很简单可以根据条件来查找,第二种为非结构化数据,指没有固定格式的数据,比如文档,word等对非结构化的数据进行检索就是全文检索。
全文检索又分两种方法:第一顺序扫描法,就是挨个找,找到需要的数据,直到全部找完。第二种就是全文检索,将没有规则的数据中的部分信息提取出来,重新组织,成为有结构的数据,然后再进行查询,提取出来的数据就称之为索引。
例子:字典,字典的拼音表和部首检字表就相当于字典的索引。
使用Lucene进行全文检索的操作
全文检索分为两个部分:
1:创建索引
2:搜索索引
如何创建索引:
1:获取需要创建索引的文档
2:将文档传给分词器
3:分词器进行分词处理
4:利用得到的词创建字典,进行排序,合并相同的词,形成倒排链表
如何对索引进行搜索
1:输入查询语句
2:对查询语句进行词法分析(获取查询语句中需要的类容)
3:分词处理
4:搜索索引,在索引表中找到关键词的文档链表,将相同的合并,形成新的文档链表
5:根据文档和查询语句的相关性对结果进行排序(计算权重和判断相关性)
6:返回结果集
Lucene简单入门
pom.xml 添加依赖
<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-core</artifactId>
<version>4.6.1</version>
</dependency>
<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-analyzers-common</artifactId>
<version>4.6.1</version>
</dependency>
<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-queryparser</artifactId>
<version>4.6.1</version>
</dependency>
<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-codecs</artifactId>
<version>4.6.1</version>
</dependency>
创建索引
// 索引存放目录
public static final String INDEX_DIR = "E:\\index_dir1";
public void createIndex() throws IOException {
//索引写入位置
Directory index = FSDirectory.open(new File(INDEX_DIR));
//分词器
Analyzer analyzer = new StandardAnalyzer(); //可以配置不同的分析器
IndexWriterConfig config = new IndexWriterConfig(Version.LATEST,analyzer);
//索引写入器
IndexWriter indexWriter = new IndexWriter(index,config);
//文档写入
Document doc = new Document();
doc.add(new StringField("title","Lucene in Action",Field.Store.YES));
doc.add(new StringField("content","学习lucene的使用",Field.Store.YES));
indexWriter.addDocument(doc);
//关闭索引写入
indexWriter.close();
}
public void search() throws Exception {
String keyWord = "Lucene";
//查询器
Query query = new QueryParser("title",new StandardAnalyzer()).parse(keyWord);
//打开索引文件
Directory writer = FSDirectory.open(new File(INDEX_DIR));
IndexReader reader = DirectoryReader.open(writer);
IndexSearcher searcher = new IndexSearcher(reader);
TopDocs topDocs = searcher.search(query,100);
System.out.println("查询总数:"+topDocs.totalHits);
}
上一篇: lucene2.9学习第一天
下一篇: 2.9