{"id":3556,"date":"2018-12-13T15:53:44","date_gmt":"2018-12-13T07:53:44","guid":{"rendered":"http:\/\/www.xttblog.com\/?p=3556"},"modified":"2018-12-13T15:53:44","modified_gmt":"2018-12-13T07:53:44","slug":"lucene-%e5%ae%9e%e6%88%98%e6%95%99%e7%a8%8b%e7%ac%ac%e5%8d%81%e5%9b%9b%e7%ab%a0%e4%bd%bf%e7%94%a8-multireader-%e5%ae%9e%e7%8e%b0%e5%a4%9a%e7%b4%a2%e5%bc%95%e7%9a%84%e6%90%9c%e7%b4%a2%e5%90%88%e5%b9%b6","status":"publish","type":"post","link":"https:\/\/www.xttblog.com\/?p=3556","title":{"rendered":"Lucene \u5b9e\u6218\u6559\u7a0b\u7b2c\u5341\u56db\u7ae0\u4f7f\u7528 MultiReader \u5b9e\u73b0\u591a\u7d22\u5f15\u7684\u641c\u7d22\u5408\u5e76\u641c\u7d22"},"content":{"rendered":"<p>\n\t\u5728\u4f7f\u7528 Lucene \u7684\u8fc7\u7a0b\u4e2d\uff0c\u6211\u4eec\u9700\u8981\u901a\u8fc7 FSDirectory.open(Paths.get(&quot;D:\\\\xttblog&quot;)); \u4e4b\u7c7b\u7684\u5f97\u5230 lucene \u7684\u7d22\u5f15\u76ee\u5f55\u3002\u7136\u540e\u518d\u5f97\u5230 IndexWriter\uff0c\u6216\u8005\u901a\u8fc7 DirectoryReader.open() \u76f4\u63a5\u5f97\u5230 IndexReader\uff0c\u7136\u540e\u6211\u4eec\u518d\u901a\u8fc7 IndexSearcher \u8fdb\u884c\u7d22\u5f15\u641c\u7d22\u3002\u4f46\u662f\u73b0\u5728\u6709\u4e00\u4e2a\u65b0\u7684\u95ee\u9898\uff0c\u6211\u7684\u7d22\u5f15\u76ee\u5f55\u5b58\u5728\u591a\u4e2a\uff0c\u90a3\u4e48\u6539\u5982\u4f55\u4f55\u5fc5\u591a\u4e2a IndexReader \u5b9e\u73b0\u591a\u7d22\u5f15\u7684\u5408\u5e76\u641c\u7d22\u5462\uff1f\u7b54\u6848\u5c31\u662f\u672c\u6587\u7684 MultiReader\uff01\n<\/p>\n<p>\n\tMultiReader \u7684\u6784\u9020\u51fd\u6570\u662f\u4e00\u4e2a\u53ef\u53d8\u53c2\u6570\u5217\u8868\u3002\u901a\u8fc7 MultiReader(IndexReader&hellip; subReaders)\u53ef\u4ee5\u63a5\u6536\u591a\u4e2a IndexReader \u5b9e\u4f8b\uff0c\u7136\u540e\u518d\u5408\u5e76\u6210\u4e00\u4e2a IndexSearcher\uff0c\u8fd9\u6837\u5c31\u53ef\u4ee5\u505a\u5230\u591a\u7d22\u5f15\u6587\u4ef6\u7684\u5408\u5e76\u641c\u7d22\u3002\n<\/p>\n<pre class=\"brush:java;\">\r\nimport org.apache.lucene.analysis.Analyzer;\r\nimport org.apache.lucene.analysis.core.WhitespaceAnalyzer;\r\nimport org.apache.lucene.document.Document;\r\nimport org.apache.lucene.document.Field;\r\nimport org.apache.lucene.document.StringField;\r\nimport org.apache.lucene.index.*;\r\nimport org.apache.lucene.search.IndexSearcher;\r\nimport org.apache.lucene.search.ScoreDoc;\r\nimport org.apache.lucene.search.TermRangeQuery;\r\nimport org.apache.lucene.search.TopDocs;\r\nimport org.apache.lucene.store.Directory;\r\nimport org.apache.lucene.store.RAMDirectory;\r\nimport org.apache.lucene.util.BytesRef;\r\nimport org.junit.After;\r\nimport org.junit.Assert;\r\nimport org.junit.Before;\r\nimport org.junit.Test;\r\nimport java.io.IOException;\r\n\r\n\/**\r\n * Description:\u6d4b\u8bd5\u6709\u591a\u4e2a\u7d22\u5f15\u6587\u4ef6\u7684\u60c5\u51b5\u4e0b\uff0c\u5982\u4f55\u8fdb\u884c\u641c\u7d22\u5e76\u5408\u5e76\u641c\u7d22\u7ed3\u679c\r\n *\/\r\npublic class MultiReaderDemo {\r\n    private Analyzer analyzer = new WhitespaceAnalyzer();\r\n    Directory aDirectory = new RAMDirectory();\r\n    Directory bDirectory = new RAMDirectory();\r\n    IndexWriterConfig aIndexWriterConfig = new IndexWriterConfig(analyzer);\r\n    IndexWriterConfig bIndexWriterConfig = new IndexWriterConfig(analyzer);\r\n    IndexWriter aIndexWriter;\r\n    IndexWriter bIndexWriter;\r\n    @Before\r\n    public void setUp() throws IOException {\r\n        String[] animals = {&quot;a&quot;, &quot;b&quot;, &quot;c&quot;, &quot;d&quot;, &quot;e&quot;, &quot;f&quot;, &quot;g&quot;, &quot;h&quot;, &quot;i&quot;, &quot;j&quot;, &quot;k&quot;, &quot;l&quot;, &quot;m&quot;, &quot;n&quot;, &quot;o&quot;, &quot;p&quot;, &quot;q&quot;, &quot;r&quot;, &quot;s&quot;, &quot;t&quot;, &quot;u&quot;, &quot;v&quot;, &quot;w&quot;, &quot;x&quot;, &quot;y&quot;, &quot;z&quot;};\r\n        aIndexWriter = new IndexWriter(aDirectory, aIndexWriterConfig);\r\n        bIndexWriter = new IndexWriter(bDirectory, bIndexWriterConfig);\r\n        for (int i = 0; i &lt; animals.length; i++) {\r\n            Document document = new Document();\r\n            String animal = animals[i];\r\n            document.add(new StringField(&quot;animal&quot;, animal, Field.Store.YES));\r\n            if (animal.charAt(0) &lt; &#039;n&#039;) {\r\n                aIndexWriter.addDocument(document);\r\n            } else {\r\n                bIndexWriter.addDocument(document);\r\n            }\r\n        }\r\n        aIndexWriter.commit();\r\n        bIndexWriter.commit();\r\n    }\r\n    @After\r\n    public void setDown() {\r\n        try {\r\n            if (aIndexWriter != null &amp;&amp; aIndexWriter.isOpen()) {\r\n                aIndexWriter.close();\r\n            }\r\n            if (bIndexWriter != null &amp;&amp; bIndexWriter.isOpen()) {\r\n                bIndexWriter.close();\r\n            }\r\n        } catch (IOException e) {\r\n            e.printStackTrace();\r\n        }\r\n    }\r\n    @Test\r\n    public void testMultiReader() throws IOException {\r\n        IndexReader aIndexReader = DirectoryReader.open(aDirectory);\r\n        IndexReader bIndexReader = DirectoryReader.open(bDirectory);\r\n        MultiReader multiReader = new MultiReader(aIndexReader, bIndexReader);\r\n        IndexSearcher indexSearcher = new IndexSearcher(multiReader);\r\n        TopDocs animal = indexSearcher.search(new TermRangeQuery(&quot;animal&quot;, new BytesRef(&quot;h&quot;), new BytesRef(&quot;q&quot;), true, true), 10);\r\n        Assert.assertEquals(10, animal.totalHits);\r\n        ScoreDoc[] scoreDocs = animal.scoreDocs;\r\n        for (ScoreDoc sd : scoreDocs) {\r\n            System.out.println(indexSearcher.doc(sd.doc));\r\n        }\r\n    }\r\n}<\/pre>\n<p>\n\t\u4e00\u4e2a IndexReader \u5b9e\u4f8b\u5bf9\u5e94\u4e00\u4e2a\u7d22\u5f15\u6587\u4ef6\u76ee\u5f55\uff0c\u901a\u8fc7 MultiReader \u63a5\u6536\u591a\u4e2a IndexReader \u5b9e\u4f8b\uff0c\u4e4b\u540e\u7528\u8be5 MultiReader \u5b9e\u4f8b\u521d\u59cb\u5316 IndexSearcher\u3002\n<\/p>\n<p>\n\t\u9700\u8981\u6ce8\u610f\u7684\u662f\uff0cIndexReader \u5b9e\u4f8b\u662f\u5b8c\u5168\u7ebf\u7a0b\u5b89\u5168\u7684\uff0c\u591a\u7ebf\u7a0b\u53ef\u4ee5\u8c03\u7528\u5176\u4efb\u4f55\u65b9\u6cd5\uff0c\u56e0\u800c\u65e0\u9700\u5bf9 IndexReader \u5b9e\u4f8b\u8fdb\u884c\u540c\u6b65\u3002\u5982\u679c\u4f60\u7684\u5e94\u7528\u9700\u8981\u5916\u90e8\u540c\u6b65\u64cd\u4f5c\uff0c\u5bf9\u4f60\u81ea\u5df1\u7684\u5bf9\u8c61\u8fdb\u884c\u540c\u6b65\uff0c\u800c\u4e0d\u662f Lucene\u3002<\/p>\n<!-- <audio autoplay=\"autoplay\" height=\"100\" width=\"100\" hidden=\"true\"><source src=\"https:\/\/c.coka.la\/orAvPR.mp3\" type=\"audio\/mp3\"\/><\/audio><img decoding=\"async\" src=\"https:\/\/images.weserv.nl\/?url=https:\/\/ws3.sinaimg.cn\/large\/8fa5dcfcgy1g4em3rzar5j20ib089ae0.jpg\" alt=\"\u4e1a\u4f59\u8349\u516c\u4f17\u53f7\"\/> --><p><!-- <img decoding=\"async\" src=\"https:\/\/raw.githubusercontent.com\/xmt1139057136\/xttblog\/master\/8fa5dcfcgy1g4em3rzar5j20ib089ae0.jpg\" alt=\"\u4e1a\u4f59\u8349\u516c\u4f17\u53f7\"\/>--><img decoding=\"async\" src=\"https:\/\/saas.51autoparts.cn\/api\/admin\/sys-file\/oss\/file?fileName=84db51f8561e448f9a4fda2eff0811f9.jpg\" alt=\"\u4e1a\u4f59\u8349\u516c\u4f17\u53f7\"\/><\/p><p>\u6700\u540e\uff0c\u6b22\u8fce\u5173\u6ce8\u6211\u7684\u4e2a\u4eba\u5fae\u4fe1\u516c\u4f17\u53f7\uff1a\u4e1a\u4f59\u8349\uff08yyucao\uff09\uff01<b>\u53ef\u52a0\u4f5c\u8005\u5fae\u4fe1\u53f7\uff1a<font color=\"red\">xttblog2<\/font>\u3002\u5907\u6ce8\uff1a\u201c1\u201d\uff0c\u6dfb\u52a0\u535a\u4e3b\u5fae\u4fe1\u62c9\u4f60\u8fdb\u5fae\u4fe1\u7fa4\u3002\u5907\u6ce8\u9519\u8bef\u4e0d\u4f1a\u540c\u610f\u597d\u53cb\u7533\u8bf7\u3002<\/b>\u518d\u6b21\u611f\u8c22\u60a8\u7684\u5173\u6ce8\uff01\u540e\u7eed\u6709\u7cbe\u5f69\u5185\u5bb9\u4f1a\u7b2c\u4e00\u65f6\u95f4\u53d1\u7ed9\u60a8\uff01\u539f\u521b\u6587\u7ae0\u6295\u7a3f\u8bf7\u53d1\u9001\u81f3532009913@qq.com\u90ae\u7bb1\u3002\u5546\u52a1\u5408\u4f5c\u4e5f\u53ef\u6dfb\u52a0\u4f5c\u8005\u5fae\u4fe1\u8fdb\u884c\u8054\u7cfb\uff01<\/p><p>\u672c\u6587\u539f\u6587\u51fa\u5904\uff1a<a href=\"https:\/\/www.xttblog.com\">\u4e1a\u4f59\u8349<\/a>\uff1a &raquo; <a href=\"https:\/\/www.xttblog.com\/?p=3556\">Lucene \u5b9e\u6218\u6559\u7a0b\u7b2c\u5341\u56db\u7ae0\u4f7f\u7528 MultiReader \u5b9e\u73b0\u591a\u7d22\u5f15\u7684\u641c\u7d22\u5408\u5e76\u641c\u7d22<\/a><\/p><!-- <div class=\"bd-reward-stl\"><button id=\"bdRewardBtn\"><span><\/span><\/button><\/div> -->","protected":false},"excerpt":{"rendered":"<p>\u5728\u4f7f\u7528 Lucene \u7684\u8fc7\u7a0b\u4e2d\uff0c\u6211\u4eec\u9700\u8981\u901a\u8fc7 FSDirectory.open(Paths.get(&#038;quot [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[1822,1796,1795,1821,1823],"class_list":["post-3556","post","type-post","status-publish","format-standard","hentry","category-java","tag-directoryreader","tag-indexwriter","tag-indexwriterconfig","tag-multireader","tag-ramdirectory"],"_links":{"self":[{"href":"https:\/\/www.xttblog.com\/index.php?rest_route=\/wp\/v2\/posts\/3556","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.xttblog.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.xttblog.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.xttblog.com\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.xttblog.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=3556"}],"version-history":[{"count":1,"href":"https:\/\/www.xttblog.com\/index.php?rest_route=\/wp\/v2\/posts\/3556\/revisions"}],"predecessor-version":[{"id":3557,"href":"https:\/\/www.xttblog.com\/index.php?rest_route=\/wp\/v2\/posts\/3556\/revisions\/3557"}],"wp:attachment":[{"href":"https:\/\/www.xttblog.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=3556"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.xttblog.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=3556"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.xttblog.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=3556"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}