数値識別子 ( ) によるバイナリ データへのエンティティ ウィッチ ポイントがありますbinId
。ユーティリティ クラスは、ID を指定してバイナリ ストリーム形式を提供できます。私の目標は、このバイナリ ストリーム (通常はファイル) にインデックスを付けることです。
コンセプトは、バイナリデータ識別子フィールドのブリッジを作成することです。ブリッジ内でユーティリティ クラスを呼び出し、ストリームを取得し、指定されたストリームで新しいフィールドを作成します。次に、このストリームをTika bridgeでインデックス化/分析したいと思います。
FieldBridgeを使用していますが、LuceneOptions は使用していません。さらに、エンティティ クラスにアノテーションを付けることができないため、Programmatic APIを使用します。
これまでのところ、次のようになります。
public class SearchMappingFactory {
@Factory
public SearchMapping getSearchMapping(){
SearchMapping mapping = new SearchMapping();
mapping.entity(Attachment.class)
.indexed()
.property("id", ElementType.FIELD)
.documentId()
.property("name", ElementType.FIELD)
.field()
.property("description", ElementType.FIELD)
.field()
.property("binId", ElementType.FIELD)
.field()
.name("attachmentFile")
.bridge(AttachmentContentSearchBridge.class)
.property("content", ElementType.FIELD) // this is my try to define additional bridge
.field()
.bridge(TikaBridge.class)
;
return mapping;
};
}
そして私の橋:
public class AttachmentContentSearchBridge implements FieldBridge {
@Override
public void set(String name, Object value, Document document, LuceneOptions luceneOptions) {
Reader reader = new InputStreamReader(MyBinUtil.getStreamForId((Integer)value));
Field field = new Field("content",reader);
//i'd like to add tika bridge here, but i cant
document.add(field);
}
}
ブリッジから始めましょう。それは非常に単純です。唯一の問題は、新しく作成されたフィールドへのブリッジを定義できないことcontent
です。これが主な問題です。
content
ブリッジを定義できるフィールドをマッピングに追加して解決しようとしました。定義が受け入れられ、アプリケーションが起動して動作しますが、index forcontent
にはキーワードがありません :(
FieldBridge 内で作成されたフィールドに対して TikeBridge を定義する方法についてアドバイスをお願いします。
お読みいただきありがとうございます。お役に立てば幸いです。