@Entity
@Indexed
public class Person {
@EmbeddedId @DocumentId @FieldBridge(impl=PersonPkBridge.class) private PersonPK id;
@Field(index=Index.UN_TOKENIZED) private long age;
public PersonPK getId() {
return id;
}
public void setId(PersonPK id) {
this.id = id;
}
public long getAge() {
return age;
}
public void setAge(long age) {
this.age = age;
}
}
public class PersonPkBridge implements MetadataProvidingFieldBridge {
@Override
public void set(String name, Object value,
Document document, LuceneOptions luceneOps) {
Map<String, String> map = (Map<String, String>) value;
String firstName = map.get( "firstName" );
String lastName = map.get( "lastName" );
luceneOps.addFieldToDocument( name + "_firstName", lastName, document );
luceneOps.addFieldToDocument( name + "_lastName", lastName, document );
document.add( new SortedDocValuesField(
name + "_firstName", new BytesRef( firstName ) ) );
document.add( new SortedDocValuesField(
name + "_lastName", new BytesRef( lastName ) ) );
}
@Override
public void configureFieldMetadata(String name, FieldMetadataBuilder builder) {
builder
.field( name + "_firstName", FieldType.STRING )
.sortable( true )
.field( name + "_lastName", FieldType.STRING )
.sortable( true );
}
}