2012-04-28 6 views
1

私は、休止状態のsearch3.2に基づいて本の検索機能を実装しています。カンマ区切りのテキスト値でフィールドをインデックスする方法 - 休止状態の検索

ブックオブジェクトには、authornamesというフィールドが含まれています。 Authornames値は、名前とコンマのリストは、スプリッタであり、単一の著者名でいるので、ユーザーの検索帳私は、UN_TOKENIZEDする名前の各が必要「ジョン・ウィル、ロビン・ロッド、ジェームズTimerberland」

@Field(index = org.hibernate.search.annotations.Index.UN_TOKENIZED,store=Store.YES) 
@FieldBridge(impl=CollectionToCSVBridge.class) 
private Set<String> authornames; 

言います:ジョン・ウィル、ロビン・ロッド、ジェイムズ・タイマーベルン。

私はindexsをチェックするためにルークを使用し、authornamesフィールドの値が「ジョン・ウィル、ロビン・ロッド、ジェームズTimerberland」として保存されているが、私は照会することにより、結果として得ることができない「authornamesを:ジョン・ウィル」

誰もがすることができますどうすればいいの?

答えて

1

私は、CollectionToCSVBridgeのすべての名前を、大きな文字列の "、"で連結しています。あなたは代わりに分離し、インデックスに個別に各要素を追加しておく必要があり :

@Override 
public void set(String name, Object value, Document document, LuceneOptions luceneOptions) { 
    if (value == null) { 
     return; 
    } 
    if (!(value instanceof Collection)) { 
     throw new IllegalArgumentException("This FieldBridge only supports collections."); 
    } 
    Collection<?> objects = (Collection<?>) value; 

    for (Object object : objects) { 
     luceneOptions.addFieldToDocument(name, objectToString(object), document); // in your case objectToString could do just a #toString 
    } 
} 

https://forum.hibernate.org/viewtopic.php?f=9&t=1015286&start=0

も参照してください。