lucene一个field多个条件查询

本文介绍了一个使用Apache Lucene实现类似SQL IN查询功能的Java示例。通过MultiPhraseQuery结合BooleanQuery,演示了如何根据多个关键词进行文档搜索。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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();
         }
     }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值