Lucene创建索引、查询索引入门案例

一、环境搭建

1.新建java-project工程,导入以下三个jar包。
commons-io-2.2.jar
lucene-analyzers-common-7.4.0.jar
lucene-core-7.4.0.jar
2. 新建索引保存的文件夹。例如:I:\Lucene\index
3. 新建一个文件目录,包含一些测试文本文档。例如目录为:I:\Lucene\index

二、创建索引

/**
     * 创建一个Director对象,指定索引库的位置
     * 基于Director对象,创建IndexWriter对象
     * 读取磁盘上的文件,为每个文件创建一个文档对象
     * 向文档对象中添加域
     * 把文档对象写入索引库
     * 关闭IndexWriter对象
     *
     */
    @Test
    public void createIndex() throws Exception{
        //把索引库保存在磁盘
        Directory directory = FSDirectory.open(new File("I:\\Lucene\\index").toPath());

        IndexWriter indexWriter = new IndexWriter(directory,new IndexWriterConfig());

        File dir = new File("I:\\Lucene\\searchsource");

        File[] files = dir.listFiles();

        for (File file:
             files) {

            String filename = file.getName();

            String filepath = file.getPath();

            String content = FileUtils.readFileToString(file,"utf8");

            long size = FileUtils.sizeOf(file);

            Field fieldName = new TextField("name",filename, Field.Store.YES);

            Field fieldPath = new TextField("path",filepath, Field.Store.YES);

            Field fieldContent = new TextField("content",content, Field.Store.YES);

            Field fieldSize = new TextField("size",size+"", Field.Store.YES);

            Document document = new Document();
            document.add(fieldName);
            document.add(fieldPath);
            document.add(fieldContent);
            document.add(fieldSize);

            indexWriter.addDocument(document);
        }

        indexWriter.close();

    }

三、查询索引

/**
     * 查询索引
     *
     */
    @Test
    public void searchIndex() throws Exception{

        Directory directory = FSDirectory.open(new File("I:\\黑马学习\\Lucene\\index").toPath());

        IndexReader indexReader = DirectoryReader.open(directory);

        IndexSearcher indexSearcher = new IndexSearcher(indexReader);

        Query query = new TermQuery(new Term("content","spring"));

        TopDocs topDocs = indexSearcher.search(query, 10);

        ScoreDoc[] scoreDocs = topDocs.scoreDocs;

        for (ScoreDoc scoreDoc:
             scoreDocs) {

            int docId = scoreDoc.doc;

            Document document = indexSearcher.doc(docId);

            System.out.println(document.getField("name"));


        }

        indexReader.close();


    }

四、查看分析器的分词效果

@Test
    public void testTokenStream() throws Exception{

        Analyzer analyzer = new StandardAnalyzer();

        TokenStream tokenStream = analyzer.tokenStream("","the spring Framework is ...");

        CharTermAttribute charTermAttribute = tokenStream.addAttribute(CharTermAttribute.class);

        tokenStream.reset();

        while (tokenStream.incrementToken()){
            System.out.println(charTermAttribute.toString());
        }
        tokenStream.close();
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一点博客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值