【发布时间】:2013-05-09 04:56:33
【问题描述】:
我想从已经创建的索引中读取一些文档,然后将它们放在另一个索引中。但是我无法在“另一个索引”中检索这些文档 哦,文档只有 StringField 。。 ..someboy 可以帮助我
代码:
public static void test() throws IOException{
IndexWriterConfig conf=new IndexWriterConfig(Version.LUCENE_43, new MapbarAnalyzer(TokenizerModle.COMMON));
conf.setOpenMode(OpenMode.CREATE);
conf.setMaxBufferedDocs(10000);
LogByteSizeMergePolicy policy=new LogByteSizeMergePolicy();
policy.setNoCFSRatio(1.0);
policy.setUseCompoundFile(true);
conf.setMergePolicy(policy);
Directory d=new RAMDirectory();
IndexWriter iw=new IndexWriter(d, conf);
Document doc=new Document();
doc.add(new StringField("type", "5B0", Store.YES));
iw.addDocument(doc);
iw.close();
IndexReader r=DirectoryReader.open(d);
IndexSearcher is=new IndexSearcher(r);
Query q=new TermQuery(new Term("type","5B0"));
TopDocs docs=is.search(q, 10);
System.out.println(docs.totalHits);
Directory d1=new RAMDirectory();
IndexWriter iw1=new IndexWriter(d1, conf);
int maxdoc=r.maxDoc();
for(int i=0;i<maxdoc;i++){
Document doc0=r.document(i);
iw1.addDocument(doc0);
}
iw1.close();
IndexReader r1=DirectoryReader.open(d1);
IndexSearcher is1=new IndexSearcher(r1);
Query q1=new TermQuery(new Term("type","5B0"));
TopDocs docs1=is1.search(q1, 10);
System.out.println(docs1.totalHits);
}
【问题讨论】:
-
如果您只是没有从查询中返回任何文档,这可能取决于您使用的分析器。
MapbarAnalyzer到底做了什么?请记住,术语查询不会被分析,因此您必须搜索与索引中完全相同的标记才能找到结果。 -
嗨,javana。对于'StringField' lucene 直接调用'StringTokenStream',所以我认为MapbarAnalyzer 做什么是无关紧要的。我尝试了'KeywordAnalyzer StopAnalyzer',它是同样的问题。我是什么困惑的是原始文档可以搜索结果,但将此文档重写为索引是不能的