阅读更多
Directory:
Directory这个类代表了 Lucene 的索引的存储的位置,这是一个抽象类,
它目前有两个实现,第一个是 FSDirectory,它表示一个存储在文件系统中的索引的位置。
第二个是 RAMDirectory,它表示一个存储在内存当中的索引的位置。
Document:
Document文档类似数据库中的一条记录,可以由好几个字段(Field)组成,并且字段可以套用不同的类型
Document 是用来描述文档的,这里的文档可以指一个 HTML 页面,一封电子邮件,或者是一个文本文件。
一个 Document 对象由多个 Field 对象组成的。
可以把一个 Document 对象想象成数据库中的一个记录,而每个 Field 对象就是记录的一个字段。
IndexWriter
IndexWriter 是 Lucene 用来创建索引的一个核心的类,
他的作用是把一个个的 Document 对象加到索引中来。
例如:IndexWriter writer = new IndexWriter(directory, new StandardAnalyzer(), false);
第一个参数是要索引建立在哪个目录里
第二个参数是新建一个文本分析器,这里用的是标准的大家也可以自己写一个
第三个参数如果是true,在建立索引之前先将目录清空。
Analyzer
在一个文档被索引之前,首先需要对文档内容进行分词处理,
这部分工作就是由 Analyzer 来做的。Analyzer 类是一个抽象类,它有多个实现。
针对不同的语言和应用需要选择适合的 Analyzer。
Analyzer 把分词后的内容交给 IndexWriter 来建立索引
IndexSearcher
IndexSearcher是用来在建立好的索引上进行搜索的。
它只能以只读的方式打开一个索引,所以可以有多个IndexSearcher的实例在一个索引上进行操作。
Term是搜索的基本单位,一个Term对象有两个String类型的域组成。
生成一个Term对象可以有如下一条语句来完成:
Term term = new Term(“fieldName”,”queryWord”);
其中第一个参数代表了要在文档的哪一个Field上进行查找,第二个参数代表了要查询的关键词。
Term term = new Term(fieldNames[i], keyWord);
FuzzyQuery用来搜索相似的term
FuzzyQuery fQuery = new FuzzyQuery(term);
Query这是一个抽象类,他有多个实现,
比如TermQuery, BooleanQuery, PrefixQuery.
这个类的目的是把用户输入的查询字符串封装成Lucene能够识别的Query。
如果想输入关键字而不想关心是在哪个Field里的就可以用MultiFieldQueryParser了。
Query keyQuery = MultiFieldQueryParser.parse(keyWord, fieldNames,
conditions, new StandardAnalyzer());
BooleanClause.Occur[]的三种类型:
MUST : + and
MUST_NOT : - not
SHOULD : or
Hits是用来保存搜索的结果的