1

作成されたインデックスからいくつかのドキュメントを読み取り、それらを別のインデックスに配置したい。しかし、これらのドキュメントを「別のインデックス」で取得することはできません。

コード:

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);


}
4

1 に答える 1

0

これら 2 つのインデックス/ドキュメント/クエリの違いを比較してみてください。doc0 のフィールドには「トークン化された」属性が設定されていることがわかります。

次のようにコードを変更します。

for(int i=0;i<maxdoc;i++){
    Document doc0=r.document(i);
    Field f1 = (Field) doc0.getField("type");
    f1.fieldType().setTokenized(false);
    iw1.addDocument(doc0);
}

別のインデックスから結果を取得できます。

しかし、InderReader から取得する FieldType が変更された理由がわかりません...

于 2013-05-10T10:58:36.090 に答える