lucene一个field多个条件查询

来源:互联网 发布:java 输入数字判断质数 编辑:程序博客网 时间:2024/06/05 04:18

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();         }     }    }}
0 0
原创粉丝点击