lucene模拟sql where in 查询demo
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import org.apache.lucene.document.Document;
import org.apache.lucene.index.DirectoryReader;
import org.apache.lucene.index.Term;
import org.apache.lucene.search.BooleanClause;
import org.apache.lucene.search.BooleanQuery;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.MultiPhraseQuery;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import org.junit.Test;
public class IluceneTest {
@Test
public void test(){
DirectoryReader reader = null;
try{
// 1、创建Directory
Directory directory = FSDirectory.open(new File("/home/ilucene"));//在硬盘上生成Directory
// 2、创建IndexReader
reader = DirectoryReader.open(directory);
// 3、根据IndexWriter创建IndexSearcher
IndexSearcher searcher = new IndexSearcher(reader);
String[] keys = new String[]{"211058","254"};
//同时声明一个与之对应的字段数组
BooleanQuery rootQuery = new BooleanQuery();
MultiPhraseQuery query = new MultiPhraseQuery();
ArrayList<Term> terms = new ArrayList<Term>();
for(String key:keys){
terms.add(new Term("cataId",key));
}
query.add((Term[])terms.toArray(new Term[terms.size()]));
rootQuery.add(query,BooleanClause.Occur.SHOULD);
TopDocs tds = searcher.search(rootQuery, 100);//查询10条记录
ScoreDoc[] sds = tds.scoreDocs;
for(ScoreDoc sd:sds){
Document d = searcher.doc(sd.doc);
System.out.println(d.get("id"));
}
}catch(Exception e){
e.printStackTrace();
}finally{
//9、关闭reader
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}