Lucene搜索过程测试

IndexSearcher搜索方法如下:

  1. indexSearcher.search(query, n) 根据Query搜索,返回评分最高的n条记录
  2. indexSearcher.search(query, filter, n) 根据Query搜索,添加过滤策略,返回评分最高的n条
    记录
  3. indexSearcher.search(query, n, sort)
    根据Query搜索,添加排序策略,返回评分最高的n条
    记录
  4. indexSearcher.search(booleanQuery,
    filter, n, sort)
    根据Query搜索,添加过滤策略,添加排序策略,返
    回评分最高的n条记录
@Test
    void testIndexSearch() throws ParseException, IOException {
        //1.创建分词器(对搜索的关键词进行分词使用)
        //注意:分词器要和创建索引的适合使用的分词器相同
        Analyzer analyzer = new StandardAnalyzer();
        //2.创建查询对象,第一个参数:默认查询域,如果查询的关键字中带搜索的域名,则从指定域中查询,如果不带域名则从,默认搜索域中查询
        //第二个参数:使用的分词器
        QueryParser queryParser = new QueryParser("title",analyzer);
        //3.设置搜索关键词
        Query  query = queryParser.parse("java");
        //4.创建Directory目录对象,指定索引库的位置
        Directory dir = FSDirectory.open(Paths.get("E:\\luceneJdDir"));
        //5.创建输入流对象
        IndexReader indexReader = DirectoryReader.open(dir);
        //6.创建搜索对象
        IndexSearcher indexSearcher = new IndexSearcher(indexReader);
        //7.搜索,并返回结果
        //第二个参数:是返回多少条数据用于展示,分页使用
        TopDocs topDocs = indexSearcher.search(query,10);
        //获取查询到的结果集的总数
        System.out.println("======count======"+topDocs.totalHits);
        //8.获取结果集
        ScoreDoc[] scoreDocs = topDocs.scoreDocs;
        //9.遍历结果集
        if(Objects.nonNull(scoreDocs)){
            for(ScoreDoc scoreDoc: scoreDocs){
                //获取查询到的文档唯一标识,文档id,这个id是Lucene在创建文档的时候自动分配的
                int docId =scoreDoc.doc;
                //通过文档id,读取文档
                Document doc = indexSearcher.doc(docId);
                //通过域名,从文档中获取域值
                System.out.println("===title==="+doc.get("title"));
                System.out.println("===img==="+doc.get("img"));
                System.out.println("===price==="+doc.get("price"));
            }
        }
        //10.关闭流
        indexReader.close();
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值