0

ペイロードを持つ 1 つの用語を含むフィールドをドキュメントにインデックス付けしようとしています。私にとって機能する Field の唯一のコンストラクターは TokenStream を取るため、このクラスから継承し、必要なものの最も基本的な実装を提供することにしました。

public class MyTokenStream : TokenStream
{
    TermAttribute termAtt;
    PayloadAttribute payloadAtt;
    bool moreTokens = true;
    public MyTokenStream()
    {
        termAtt = (TermAttribute)GetAttribute(typeof(TermAttribute));
        payloadAtt = (PayloadAttribute)GetAttribute(typeof(PayloadAttribute));
    }
    public override bool IncrementToken()
    {
        if (moreTokens)
        {
            termAtt.SetTermBuffer("my_val");
            payloadAtt.SetPayload(new Payload(/*bye[] data*/));
            moreTokens = false;
        }

        return false;
    }     
}

インデックス作成中に使用されたコード:

        IndexWriter writer = //init tndex writer...

        Document d = new Document();
        d.Add(new Field("field_name", new MyTokenStream()));
        writer.AddDocument(d);
        writer.Commit();

そして、検索中に使用されたコード:

        IndexSearcher searcher = //init index searcher
        Query query = new TermQuery(new Term("field_name", "my_val"));
        TopDocs result = searcher.Search(query, null, 10);

デバッガーを使用して、IncrementToken() の呼び出しが実際に TermBuffer を設定することを確認しました。私の問題は、返された TopDocs インスタンスがドキュメントを返さないことであり、その理由を理解できません...実際には TermPositions (ペイロードへのアプローチを提供します...) から始めましたが、結果も得られませんでした。誰かが私に何が間違っているのか説明できますか? 現在Lucene .NET 2.9.2を使用しています

4

1 に答える 1

2

からtrueを返す必要があるTermBufferを設定した後、TermBufferIncrementTokenにフィードするものがなくなると、falseを返します。

于 2012-11-13T20:41:10.987 に答える