1

私には2つのクラスがあります。

public Class Student
{
  //primary key
  private String id;
  private String name;//name = Jonathan
  ....
  private List<CustomField> customFields;
}

public Class CustomField 
{
  //primary key
  private String id;

  private String fieldName;
  ....
  private String fieldValue;
}

customFieldsはユーザーによって定義され、任意のフィールドと値にすることができます。例:customFieldsリストには2つのオブジェクトがあります。それらは[id=001、fieldName = age、value = 30] [id = 002、fieldName = score、value=90]です。(また、ユーザーはcustomFieldsリストに必要なフィールドを追加/更新できます。customFieldsは動的です)

したがって、クラス「Student」が私のWebページに送信すると、Webページに次のように表示されます:名前:[ジョナサン]年齢:[30]スコア:[90]。

ユースケース:ユーザーは、名前、年齢、スコアのフィールドで検索できます。したがって、これらのフィールドはLuceneDocumentにインデックス付けする必要があります。Hibernate検索を使用してカスタムフィールドにインデックスを付ける場合、動的フィールドのインデックスアノテーションを作成するにはどうすればよいですか?

したがって、Hibernate Searchを使用して動的customFieldsにインデックスを付けて検索する必要がありますが、それを実装できますか?分かりますか?

編集:

public class CustomFieldBriddge implements FieldBridge
{

    public void set(String name, Object value, Document document, LuceneOptions luceneOptions)
    {
        Field.Store store           = luceneOptions.getStore();
        Field.Index index           = luceneOptions.getIndex();
        Field.TermVector termVector = luceneOptions.getTermVector();
        Float boost                 = luceneOptions.getBoost();
        if (value != null)
        {
            List<CustomField> customFields              = (List) value;
            for (CustomField customField : customFields)
            {

                String fieldName = customField.getFiledName();
                String fieldValue = customField.getFiledValue();
                Field field = new Field(fieldName, fieldValue, store.YES, index.NOT_ANALYZED,
                    termVector);    // is the field will index into Lucene document one by one?and it can be searched out? right?
                field.setBoost(boost);
                document.add(field); // is this operation will index the field into Lucuene Document?
            }
        }
    }
4

1 に答える 1

1

カスタムFieldBridgeの実​​装方法をご覧ください- http://docs.jboss.org/hibernate/stable/search/reference/en-US/html_single/#d0e4019

カスタム フィールド ブリッジを使用すると、基本的に、渡された Lucene ドキュメントと一緒にCustomFieldインスタンスのリストを取得できます。その後、 Fieldablesを作成するのはあなた次第です。あなたの場合、CustomField#fieldNameは Lucene Documentフィールド名になり、CustomField#fieldValueはフィールド値になります。DateSplitBridgeの例を見てください。

于 2012-10-16T08:17:57.487 に答える