事实上,在一些商业系统中,索引并非只存放在一个目录中,这样我们就要求将几个目录的索引进行一起查询。
代码:
public static void main(String[] args) {
try {
/*File file1 = new File("d://test1");
File file2 = new File("d://test2");
Analyzer luceneAnalyzer = new StandardAnalyzer();
IndexWriter writer1 = new IndexWriter(file1, luceneAnalyzer, true);
writer1.setUseCompoundFile(false);
IndexWriter writer2 = new IndexWriter(file2, luceneAnalyzer, true);
writer2.setUseCompoundFile(false);
Document doc1 = new Document();
Document doc2 = new Document();
Field f1 = new Field("bookname","钢铁是怎样炼成的",Field.Store.YES,Field.Index.TOKENIZED);
Field f2 = new Field("price","26",Field.Store.YES,Field.Index.TOKENIZED);
doc1.add(f1);
doc1.add(f2);
Field f3 = new Field("bookname","我的中华",Field.Store.YES,Field.Index.TOKENIZED);
Field f4 = new Field("price","20",Field.Store.YES,Field.Index.TOKENIZED);
doc2.add(f3);
doc2.add(f4);
writer1.addDocument(doc1);
writer2.addDocument(doc2);
writer1.close();
writer2.close();*/
//创建查询的内容,包装成一个数组。
String query1 = "钢";
String query2 = "[10 TO 30]";
String[] queries = {query1,query2};
//创建查询的field,包装成一个数组。
String field1 = "bookname";
String field2 = "price";
String[] fields = {field1,field2};
BooleanClause.Occur[] clause = {BooleanClause.Occur.MUST,BooleanClause.Occur.MUST};
Query q = MultiFieldQueryParser.parse(queries, fields, clause,new StandardAnalyzer());
System.out.println(q.toString());
//从所要查询的索引位置建立IndexSearcher
IndexSearcher search1 = new IndexSearcher("d://test1");
IndexSearcher search2 = new IndexSearcher("d://test2");
IndexSearcher[] searchers = {search1,search2};
MultiSearcher searcher = new MultiSearcher(searchers);
Hits hits = searcher.search(q);
for(int i=0;i<hits.length();i++)
{
System.out.println(hits.doc(i));
}
} catch (Exception e) {
e.printStackTrace();
}
}