Lucene查询操作

Lucene查询的两种方式
1.Query查询
  1).MatchAllDocsQuery
  2).TermQuery
  3).NumberRangeQuery
  4).BooleanQuery
2.QueryParser
  1).QueryParser
  2).MultiFieldQueryParser
先写一下获取IndexSearcher对象的set方法
1.IndexReader对象的get/set方法

setIndexReader();

public void setIndexReader() {
        String path = "D:\\project\\temp\\index";
        File file = new File(path);
        try {
            Directory directory = FSDirectory.open(file);
            IndexReader indexReader1 = DirectoryReader.open(directory);
            this.indexReader = indexReader1;
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

getIndexReader()

public IndexReader getIndexReader() {
        return indexReader;
    }

2.IndexSearcher对象的set方法

public void setIndexSearcher() {
        IndexReader indexReader = getIndexReader();
        IndexSearcher indexSearcher1 = new IndexSearcher(indexReader);
        this.indexSearcher = indexSearcher1;
    }

查询方法

  • MatchAllDocsQuery
public void matchAllDocsQuery(){
        MatchAllDocsQuery matchAllDocsQuery = new MatchAllDocsQuery();
       System.out.println(matchAllDocsQuery.toString());
       //获取索引查询对象
        IndexSearcher indexSearcher = getIndexSearcher();
       try {
           TopDocs topDocs = indexSearcher.search(matchAllDocsQuery, 100);
           ScoreDoc[] scoreDocs = topDocs.scoreDocs;
           //打印查询结果
            printResult(scoreDocs,indexSearcher);
       } catch (IOException e) {
           e.printStackTrace();
       }
   }
  • TermQuery
public void termQuery(){
       //查询文件名是"倔强.txt"的文件
       Term term = new Term("name","倔强.txt");
       Query query = new TermQuery(term);
       System.out.println(query.toString());
       IndexSearcher indexSearcher = getIndexSearcher();
       try {
           TopDocs search = indexSearcher.search(query, 100);
           ScoreDoc[] scoreDocs = search.scoreDocs;
           printResult(scoreDocs,indexSearcher);
       } catch (IOException e) {
           e.printStackTrace();
       }
   }
  • NumberRangeQuery
public void numberQuery () {
        //查询文件大小在1-2000之间的文件,包含1和2000,单位是字节
        NumericRangeQuery numericRangeQuery = NumericRangeQuery.newLongRange("size",1L,2000L,true,true);
        IndexSearcher indexSearcher = getIndexSearcher();
       System.out.println(numericRangeQuery.toString());
       try {
           TopDocs topDocs = indexSearcher.search(numericRangeQuery, 1000);
           ScoreDoc[] scoreDocs = topDocs.scoreDocs;
           printResult(scoreDocs,indexSearcher);
       } catch (IOException e) {
           e.printStackTrace();
       }
   }
  • BooleanQuery
public void booleanQuery () {
       BooleanQuery booleanClauses = new BooleanQuery();
       IndexSearcher indexSearcher = getIndexSearcher();
       try {
           //第一个查询条件
           Query query1 = new TermQuery(new Term("name","倔强.txt"));
           //第二个查询条件
           Query query2 = new TermQuery(new Term("name","时光机.txt"));
           //第一个查询条件文件名应该是倔强.txt
           //Occur.SHOULD 应该
           //Occur.MUST 必须
           //Occur.MUST_NOT 不必须
           booleanClauses.add(query1, BooleanClause.Occur.SHOULD);
           booleanClauses.add(query2, BooleanClause.Occur.SHOULD);
           System.out.println(booleanClauses.toString());
           TopDocs topDocs = indexSearcher.search(booleanClauses, 100);
           ScoreDoc[] scoreDocs = topDocs.scoreDocs;
           printResult(scoreDocs,indexSearcher);
       } catch (IOException e) {
           e.printStackTrace();
       }
   }
  • QueryParser
public void queryParser () {
       IndexSearcher indexSearcher = getIndexSearcher();
       //默认查询域
       QueryParser queryParser = new QueryParser("name",new IKAnalyzer());
       try {
           Query query = queryParser.parse("name:倔强.txt");
           System.out.println(query.toString());
           TopDocs topDocs = indexSearcher.search(query, 100);
           ScoreDoc[] scoreDocs = topDocs.scoreDocs;
           printResult(scoreDocs,indexSearcher);
       } catch (ParseException e) {
           e.printStackTrace();
       } catch (IOException e) {
           e.printStackTrace();
       }
   }
  • MultiFieldQueryParser
public void multiFieldQueryParsesr () {
       IKAnalyzer ikAnalyzer = new IKAnalyzer();
       //默认域
       String[] fields = new String[]{"name","content"};
       MultiFieldQueryParser multiFieldQueryParser = new MultiFieldQueryParser(fields,ikAnalyzer);

       try {
       		//索引文件名或文件内容包含倔强或者害怕的文件
           Query query = multiFieldQueryParser.parse("倔强.txt OR 害怕");
           System.out.println(query.toString());
           IndexSearcher indexSearcher = getIndexSearcher();
           TopDocs topDocs = indexSearcher.search(query, 100);
           ScoreDoc[] scoreDocs = topDocs.scoreDocs;
           printResult(scoreDocs,indexSearcher);
       } catch (ParseException e) {
           e.printStackTrace();
       } catch (IOException e) {
           e.printStackTrace();
       }
   }
  • printResult
    打印结果方法
public void printResult (ScoreDoc[] scoreDocs,IndexSearcher indexSearcher) {
        for (ScoreDoc scoreDoc : scoreDocs) {
            int doc = scoreDoc.doc;
            System.out.println("====开始===");
            try {
                Document doc1 = indexSearcher.doc(doc);
                String name = doc1.get("name");
                System.out.println("文件名:" + name);
                String size = doc1.get("size");
                System.out.println("大小:" + size);
                String filePath = doc1.get("path");
                System.out.println("大小:" + filePath);
                //String content = doc1.get("content");
                //System.out.println("文件内容:"+content);
                System.out.println("-------结束--------");
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

再接再励

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值