我有两个课程。
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列表中有两个对象。它们是[id = 001,fieldName = age,value = 30] [id = 002,fieldName = score,value = 90]。 (另外用户可以在customFields列表中添加/更新一些必要的字段,customFields是动态的)
所以,如果班级的学生&#39;发送到我的网页,它将显示:姓名:[Jonathan]年龄:[30]得分:[90]在网页上。
用户案例:用户可以按名称,年龄和分数字段进行搜索。所以这些字段应该被索引到Lucene Document中。 如果使用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?
}
}
}
答案 0 :(得分:1)
了解如何实施自定义 FieldBridge - http://docs.jboss.org/hibernate/stable/search/reference/en-US/html_single/#d0e4019
使用自定义字段桥接器,您基本上将获得 CustomField 实例列表以及传递给您的Lucene文档。然后由您来创建 Fieldables 。在您的情况下, CustomField#fieldName 成为Lucene Document 字段名称, CustomField#fieldValue 成为字段值。看一下 DateSplitBridge 示例。