2.多域搜索 MultiFieldQueryParser
1.如果想输入关键字而不想关心是在哪个Field里的就可以用MultiFieldQueryParser了。
用它的构造函数即可后面的和一个Field一样。
MultiFieldQueryParser. parse (String[] queries, String[] fields, BooleanClause.Occur[] flags, Analyzer analyzer)
第三个参数比较特殊这里也是与以前lucene1.4.3不一样的地方,看一个例子就知道了。
String[] fields = {"filename", "contents", "description"};
BooleanClause.Occur[] flags = {BooleanClause.Occur.SHOULD,
BooleanClause.Occur.MUST,//在这个Field里必须出现的
BooleanClause.Occur.MUST_NOT};//在这个Field里不能出现
MultiFieldQueryParser.parse("query", fields, flags, analyzer);
2.多索引搜索 MultiSearcher
在构造的时候传进去一个Searcher数组即可
3.过滤器Filter
看个例子:
public void FilterTest() throws IOException, ParseException {
IndexWriter indexWriter = new IndexWriter("C:\\FilterTest",new StandardAnalyzer(),true);
Document doc = new Document();
doc.add(new Field("name","程序员之家",Field.Store.YES,Field.Index.TOKENIZED));
indexWriter.addDocument(doc);
doc=new Document();
doc.add(new Field("name","程序员杂志",Field.Store.YES,Field.Index.TOKENIZED));
indexWriter.addDocument(doc);
indexWriter.close();
Query query = null;
Hits hits = null;
IndexSearcher indexSearcher = new IndexSearcher("C:\\FilterTest");
QueryParser queryParser = new QueryParser("name",new StandardAnalyzer());
query = queryParser.parse("程序");
hits = indexSearcher.search(query,new Filter(){
@Override
public BitSet bits(IndexReader reader) throws IOException{
BitSet bit = new BitSet(reader.maxDoc());
for(int i=0;i< reader.maxDoc();i++){
if(reader.document(i).get("name").enth("杂志"))//将以“杂志”后缀的过滤掉
continue;
bit.set(i);ks
}
return bit;
}
});
System.out.println(hits.length());
for(int i=0;i< hits.length();i++){
doc =hits.doc(i);
System.out.println(doc.get("name"));
}
}
这只是一个入门的文档Lucene 2.0的内容还有很多,这里只是介绍了一部分,其它的可以看帮助文档来学习。
lucene的9次博文全部转自:http://hi.baidu.com/liyihz2008/blog/item/34d81cf253cdbf5a342acc4a.html
1.如果想输入关键字而不想关心是在哪个Field里的就可以用MultiFieldQueryParser了。
用它的构造函数即可后面的和一个Field一样。
MultiFieldQueryParser. parse (String[] queries, String[] fields, BooleanClause.Occur[] flags, Analyzer analyzer)
第三个参数比较特殊这里也是与以前lucene1.4.3不一样的地方,看一个例子就知道了。
String[] fields = {"filename", "contents", "description"};
BooleanClause.Occur[] flags = {BooleanClause.Occur.SHOULD,
BooleanClause.Occur.MUST,//在这个Field里必须出现的
BooleanClause.Occur.MUST_NOT};//在这个Field里不能出现
MultiFieldQueryParser.parse("query", fields, flags, analyzer);
2.多索引搜索 MultiSearcher
在构造的时候传进去一个Searcher数组即可
3.过滤器Filter
看个例子:
public void FilterTest() throws IOException, ParseException {
IndexWriter indexWriter = new IndexWriter("C:\\FilterTest",new StandardAnalyzer(),true);
Document doc = new Document();
doc.add(new Field("name","程序员之家",Field.Store.YES,Field.Index.TOKENIZED));
indexWriter.addDocument(doc);
doc=new Document();
doc.add(new Field("name","程序员杂志",Field.Store.YES,Field.Index.TOKENIZED));
indexWriter.addDocument(doc);
indexWriter.close();
Query query = null;
Hits hits = null;
IndexSearcher indexSearcher = new IndexSearcher("C:\\FilterTest");
QueryParser queryParser = new QueryParser("name",new StandardAnalyzer());
query = queryParser.parse("程序");
hits = indexSearcher.search(query,new Filter(){
@Override
public BitSet bits(IndexReader reader) throws IOException{
BitSet bit = new BitSet(reader.maxDoc());
for(int i=0;i< reader.maxDoc();i++){
if(reader.document(i).get("name").enth("杂志"))//将以“杂志”后缀的过滤掉
continue;
bit.set(i);ks
}
return bit;
}
});
System.out.println(hits.length());
for(int i=0;i< hits.length();i++){
doc =hits.doc(i);
System.out.println(doc.get("name"));
}
}
这只是一个入门的文档Lucene 2.0的内容还有很多,这里只是介绍了一部分,其它的可以看帮助文档来学习。
lucene的9次博文全部转自:http://hi.baidu.com/liyihz2008/blog/item/34d81cf253cdbf5a342acc4a.html