对lucene的一些关键类方法理解

来源:互联网 发布:淘宝没有添加销售属性 编辑:程序博客网 时间:2024/06/03 20:49

 

索引的维护操作都是由IndexReader类提供

 

QueryParser

lucene提供了一种类似于SQL语句的查询语句,我们姑且叫它lucene语句,通过它,你可以把各种查询一句话搞定,lucene会自动把它们查分成小块交给相应Query执行。

 

 

理解核心索引类

IndexWriter 可以想象成你可以对索引进行写操作的对象

Directory 代表Lucene索引的位置其中的两个类实现

第一个 FSDirectory它表示一个存储在文件系统中索引的位置

第二个 RAMDirectory它表示一个存储在内存当中的索引的位置

Analyzer 对文档内容进行分词处理

Document 类似数据库中的一条记录 Document的方法

void add(Fieldablefield)添加一个字段(Field)Document

Stringget(String name)从文档中获得一个字段对应的文本

Field描述一个文档的某个属性

 

创建一个索引的大致过程

IndexWriter writer = new IndexWriter(INDEX_DIR,newStandardAnalyzer(),true);

Document doc = new Document();

doc.add(new Field(**));

writer.addDocument(doc);

writer.optimize();//合并索引并优化

witer.close();

 

 

理解核心搜索类

IndexSearch 是用来在建立好的索引上进行搜索的

它只能以只读的方式打开一个索引,所以可以有多个IndexSearcher的实例在一个索引上进行操作。

它提供几个搜索方法,其中一些在抽象基类Searcher中实现:

Search方法1

返回值为Hits性的对象:

public final Hits search(Query query)

public Hits search(Query,Filter)

public Hits search(Query,Sort sort)

public Hits search(Query query,Filterfilter,Sort sort)

 

Search方法2

返回索引中得分较高的文档集合,这些方法中,都带有一个int形式参数,表示取出置于TopDocs集合中的文档数量

public TopDocs search(Query query,Filterfilter,int n);

public abstract TopDocs search(Weightweight,Filter filter,int n);

public TopFieldDocs search(Query query,Filterfilter,int n,Sort sort);

public abstract TopFieldDocs search(Weightweight,Filter filter,int n,Sort sort);

 

Searcher方法3

public void search(Query query,Filterfilter,HitCollector results);

public void search(Query query,HitCollectorresult);

public abstract void search(Weighrweight,Filter filter,HitCollector results);

 

 

Term是搜索的基本单元。一个Term对象有两个String类型的域组成:字段的名称和字段的值。

在搜索时,你可能创建Term对象并和TermQuery同时使用。其中第一个参数代表了要在文档的哪一个Field上进行查找,第二个参数代表要查找的关键词

Query q = new TermQuery(enw Term(“fieldName”,”queryWord”));

Hits hit = searcher.search(q);

 

Query 是一个抽象类,这个类的目的是把用户输入的查询字符串封装成Lucene能够识别的Query

 

TermQuery 是抽象类Query的一个子类,它同时也是Lucene支持的最为基本的一个查询类。生成一个TermQuery对象由如下语句完成

它的构造函数只接受一个参数,那就是一个Term对象。

TermQuery termQuery = new TermQuery(new Term(“fieldName”,”queryWord”));

 

Hits是用来保存搜索的结果的,基于性能考虑,Hits的实例并不从索引中加载所有匹配查询的文档而是每次一小部分

 

关键词搜索的大致过程

IndexSearcher searcher = new IndexSearcher(INDEX_DIR);

Query q = new TermQuery(new Term(“contents”,”lucene”));

Hits hits = searcher.search(q);

for(int i=0;i<hits.length();i++){

       Documentdoc = hits.doc(i);

       Stringsummary = doc.get(“title”);

}

 

 

BooleanQuery布尔搜索

BooleanQuery是实际开发过程中经常使用的一种Query

它其实是一个组合的Query,在使用时可以把各种Query对象添加进去并标注它们之间的逻辑关系。

BooleanQuery是可以嵌套的(BooleanQuery是一个布尔子句的容器)

一个BooleanQuery可以成为另一个BooleanQuery的条件子句

布尔型Query的子句数目不能超过1024

 

BooleanClause布尔搜索

public void add(Query query,BooleanClause.Occuroccur)

BooleanClause用于表示布尔查询子句关系的类,包括:

BooleanClause.Occur.MUSTBooleanClause.Occur.MUST_NOT,BooleanClause.Occur.SHOULD

 

http://www.cnblogs.com/xing901022/p/3933675.html

原创粉丝点击