Perhaps some code will help to make my problem clearer
TagClassBridge
Code:
public void set(
String name,
Object value,
Document document,
LuceneOptions luceneOptions) {
Tag tag = (Tag) value;
Field field = new Field( "id",tag.getId().toString(),Store.YES,Index.NOT_ANALYZED);
document.add(field);
for(Locale locale : locales){
//we need to create a tag version for each language.
if(tag.getMessageKey() == null){
field = new Field("tag_" + locale.getLanguage(),tag.getLabel(),Store.YES,Index.ANALYZED);
}else{
field = new Field("tag_" + locale.getLanguage(),messages.getMessage(tag.getMessageKey(), null, locale),Store.YES,Index.ANALYZED);
}
document.add(field);
}
}
Code:
FullTextSession fts = Search
.getFullTextSession(getHibernateTemplate()
.getSessionFactory().getCurrentSession());
BooleanQuery bq = new BooleanQuery();
QueryBuilder qb = fts.getSearchFactory().buildQueryBuilder()
.forEntity(Tag.class).get();
Query q2 = qb
.keyword()
.wildcard()
.onField("tag_" + language.getLanguageCode())
.ignoreFieldBridge()
.matching(query + "*")
.createQuery();
bq.add(q2, Occur.MUST);
FullTextQuery qry = fts.createFullTextQuery(bq, Tag.class);
qry.setProjection("id", "tag_" + language.getLanguageCode());
qry.setSort(new Sort(new SortField("tag_"
+ language.getLanguageCode(), SortField.STRING)));
qry.setFirstResult(start);
qry.setMaxResults(max);
qry.setCacheable(true);
qry.setCacheRegion(CacheRegion.SELDOMCHANGE);
List<Object[] results = qry.list();
The results contain object arrays with the id for the Tag and null values for the selected field.