lucene精解-BooleanQuery、RangeQuery及rewrite

来源:互联网 发布:数据报表什么意思 编辑:程序博客网 时间:2024/06/10 00:59

1、BooleanQuery

1)

Term t1=new Term("bookname","女");

Term t2=new Term("bookname","的");

Term t3=new Term("bookname","我");

 

TermQuery q1=new TermQuery(t1);

TermQuery q2=new TermQuery(t2);

TermQuery q3=new TeramQuery(t3);

 

BooleanQuery query=new BooleanQuery();

query.add(q1,BooleanClause.Occur.MUST);

query.add(q2,BooleanClause.Occur.MUST);

query.add(q3,BooleanClause.Occur.MUST_NOT);

 

Hits hits=searcher.search(query);

2)

BooleanClause.Occur.MUST_NOT:不能包括

BooleanClause.Occur.MUST:必须包括

SHOULD:或

2、rewrite方法

查询重写,让所有的非原子查询将其进行查询重写,并存储实际的数据,而不是需要再从索引中读取。

3、RangeQuery

1)

Term begin=new Term("booknumber","000001");

Term end=new Term("booknumber","000006");

RangeQuery query=new RangeQuery(begin,end,false);

Hits hits=searcher.search(query);

2)使用RangeQuery会对每个项生成BooleanQuery的SHOULD查询子句,所以范围太大效率低下

3)IndexReader的terms方法取出所有排在某个词条之后的所有词条。当某一个词条与RangeQuery的上界进行比较后,发现取到了正整数,则中止循环,并把之前所有循环过的词条所在的Document取出,从而形成了检索结果集合.

 

原创粉丝点击