lunece查询实例.

lunece查询
//初始化IndexSearcher
IndexSearcher search = new IndexSearcher(path);
//构建Term
Term term = new Term(fieldName,value);
//构建Query对象
Query q = new TermQuery(term);
//检索
Hits hits = search.search(q);
//显示查询结果
for(int i=0; i<hits.length(); i++)
{
System.out.println(hits.doc(i));
}
IndexSearcher的常用方法有
search(Query q);
search(Query q,Filter filter);
search(Query q,Sort sort);
search(Query q,Filter filter,Sort sort);

Hits的常用方法有
doc(i); //得到第i个Document
id(i); //得到第i个Document在lucene文件中的id号
length(); //结果集的数量
score(i); //第i个Doucment的文档得分,默认显示方式为score值越高,排得越前。score取值0-1之间
如果想提高score的值。可以有建立索引时设置,用Field.setBoost(Float f)方法
Field f = new Field(fieldname,value,store,tokenized);
f.setBoost(5f);

在lucene中,document ID 越小,查询时所需时间越短,因为Hits的内部缓存机制。

Lunece的常用搜索

一、TermQuery 词条搜索
Query query = new TermQuery(new Term(fieldname,value));

二、BooleanQuery 布尔搜索
建立二个TermQuery
Query q1 = new TermQuery(new Term(fieldname1,value1));
Query q2 = new TermQuery(new Term(fieldname2,value2));
建立BooleanQuery对象
BooleanQuery query = new BooleanQuery();
query.add(q1,BooleanClause.Occue.MUST);
query.add(q2,BooleanClause.Occue.MUST);
BooleanClause.Occue 有三个静态值
MUST,MUST_NOT,SHOULD
must&&must = (AnB)
must&&must_not = (A-(AnB))
should&&should = (AuB)

三、RangeQuery 范围搜索
RangeQuery query = new RangeQuery(begin,end,false);
begin = new Term(fieldname,value);
end = new Term(fieldname,value);
false 表示开区间 不包括 (begin,end) true 表示闭区间 包括 [begin,end]

四、PrefixQuery 前缀搜索
PrefixQuery query = new PrefixQuery(new Term(fieldname,value));

五、PhraseQuery 短语搜索
PhraseQuery query = new PhraseQuery();
query.add(new Term(fieldname,value));
query.add(new Term(fieldname,value));
还可以设置坡度,query.setSlop(int n),默认为0如查询“钢铁”,可以用
query.add(new Term(fieldname,”钢”));
query.add(new Term(fieldname,”铁”));
如想把“钢和铁”,“钢与铁”也查询出来。可以加上query.setSlop(1);

六、MultiPhraseQuery 多短语搜索
MultiPhraseQuery query = new MultiPharseQuery();
//加入短语的前缀
query.add(new Term(fieldname,value));
//加入短语的后缀
query.add(new Term[] {new Term(fieldname,value), new Term(fieldname,value)});

七、FuzzyQuery 模糊搜索
FuzzyQuery query = new FuzzyQuery(new Term(filed,value));
它的三个构造函数
FuzzyQuery(Term t);
FuzzyQuery(Term t,float 0.5f); 相似度。0-1之间
FuzzyQuery(Term t,float 0.5f,int prefixLength);前缀必须相同的长度
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值