lucene的检索方式
Lucene 简介
Lucene 是一个基于 Java 的全文信息检索工具包,它不是一个完整的搜索应用程序,而是为你的应用程序提供索引和搜索功能。Lucene 目前是 Apache Jakarta 家族中的一个开源项目。也是目前最为流行的基于 Java 开源全文检索工具包。
主要有以下几种方式检索
TermQuery
这个检索通常查找文档中唯一数据的字段(在更新索引时特别有用),一般这个字段使用Field.Index.NOT_ANALYZED方式保存索引(但并不意味着所有Field.Index.NOT_ANALYZED方式保存索引的字段有唯一值).
Term t = new Term("contents", "java");Query query = new TermQuery(t);//最终表达式就是contents:java
TermRangeQuery query = new TermRangeQuery("title", "d", "j", true, true);//或者TermRangeQuery query = new TermRangeQuery("title", "tim", "tom", true, true);//最终表达式就是title:[d TO j]
NumericRangeQuery query = NumericRangeQuery.newIntRange("pubmonth",198805,198810,true,true);//最终表达式就是pubmonth[198805 TO 198810]
Term term = new Term("category", "/technology/computers/programming");//或者Term term = new Term("title", "can");PrefixQuery query = new PrefixQuery(term);//最终表达式就是title:can*
TermQuery searchingBooks = new TermQuery(new Term("subject","search")); //A 检索subject中有search的Query books2004 = NumericRangeQuery.newIntRange("pubmonth", 200401, ,200412,true, true); //B 检索出版时间范围BooleanQuery searchingBooks2004 = new BooleanQuery(); //用于最终合并的检索searchingBooks2004.add(searchingBooks, BooleanClause.Occur.MUST); //必须有A检索的结果searchingBooks2004.add(books2004, BooleanClause.Occur.MUST);//必须有B检索的结果//最终表达式就是+subject:search +pubmonth[200401 TO 200412]
PhraseQuery query = new PhraseQuery(); // 创建短语Queryquery.setSlop(slop); // 设置间隔for (int i=0; i < phrase.length; i++) {query.add(new Term("field", phrase[i])); // 增加短语}//最终表达式就是title:"sloppy phrase"~5 ~5表示间隔
Query query = new WildcardQuery(new Term("contents", "?ild*"));//最终表达式就是contents:?ild*
Query query = new FuzzyQuery(new Term("contents", "wuzza"));//最终表达式就是contents:wuzza~0.5
Query query = new MatchAllDocsQuery(field);//最终表达式就是*:*