一、简单概要:
无论是分词器、索引(索引库、索引表、数据)等都是为最终的索引做服务,个人觉得这张图特别重要:
这张图展示了Lucence工作原理的最核心部分:创建索引库(由索引表和数据组成)。
索引表:是对文档集合的一个索引,建立索引使用的是分词器,而且将来搜索的时候,也使用同一个分词器对象。 文档集合内部,Lucence会自动维护一个文档内容编号,它相当于hibernate映射实体的自增主键。
通过分词器可以建立并维护索引表,维护索引的时候,一般采用先删除后增加的方法来回避更新带来的性能问题。
二、关于查询:
类比Hibernate,Lucence查询分为:查询语句和对象查询两种查询方式。如果使用查询语句,一般也会在程序中将查询条件进一步封装成查询对象。
1、查询语句:
QueryParser对象,以查询内容字串和查询字段为参数,将两者解析成Query对象,IndexSearcher对象以Query对象为参数进行查询。
前面的文章中都使用了这种查询:
/**
* 搜索
*
* IndexSearcher 是用来在索引库中进行查询的
*/
@Test
public void search() throws Exception {
// String queryString = "document";
String queryString = "adddocument";
// 1,把要搜索的文本解析为 Query
String[] fields = { "name", "content" };
QueryParser queryParser = new MultiFieldQueryParser(fields, analyzer);
Query query = queryParser.parse(queryString);
// 2,进行查询
IndexSearcher indexSearcher = new IndexSearcher(indexPath);
Filter filter = null;
TopDocs topDocs = indexSearcher.search(query, filter, 10000);
System.out.println("总共有【" + topDocs.totalHit