lucene-leveldb

lucene-leveldb

Lucene的索引一般存储在文件系统(FSDirectory)或内存(RAMDirectory)。官方提供Directory接口,也就是说通过实现这个接口,可以把索引存储在其他地方(MySQL,MongoDB,LevelDB......),甚至HDFS也没问题。lucene-leveldb实现了把索引存储到LevelDB,索引的性能跟RAMDirectory相差不大,代码不是很复杂,仅仅提供实现思路,要在实际环境中应用还用很多优化的地方。

环境/依赖:

使用方式:


        Path path = Paths.get("db-data");

        File indexDir = path.toFile();

        if (indexDir.exists()) {
            TestUtils.deleteDir(indexDir);
        }

        Directory directory = new LeveldbDirectory(path);
        StandardAnalyzer analyzer = new StandardAnalyzer();
        IndexWriterConfig indexWriterConfig = new IndexWriterConfig(analyzer);
        IndexWriter writer =
                new IndexWriter(directory, indexWriterConfig);


        File resourceDir = new File(RAMDirectoryTest.class.getResource("/test-data-set").getPath());

        Long startTime = System.currentTimeMillis();
        TestUtils.indexTextFile(writer, resourceDir);
        writer.close();
        System.out.println("Index speed time : " + (System.currentTimeMillis() - startTime));

        DirectoryReader index = DirectoryReader.open(directory);

        IndexSearcher searcher = new IndexSearcher(index);

        Query query = new QueryParser("content", analyzer).parse("good");

        TopScoreDocCollector collector = TopScoreDocCollector.create(100);

        startTime = System.currentTimeMillis();
        searcher.search(query, collector);
        System.out.println("Search speed time : " + (System.currentTimeMillis() - startTime));
        ScoreDoc[] hits = collector.topDocs().scoreDocs;

        System.out.println("Found " + hits.length + " hits.");
        for (int i = 0; i < hits.length; ++i) {
            int docId = hits[i].doc;
            Document d = searcher.doc(docId);
            //System.out.println((i + 1) + ". " + d.get("fileName") + " score=" + hits[i].score);
        }

        directory.close();

转载于:https://my.oschina.net/u/866190/blog/637177

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值