来自:Hibernate Search Order by child-count 我有:
@Indexed
@Entity
public class TParent implements java.io.Serializable {
.....
private Set<TChild> TChildSet = new HashSet<TChild>(0);
@ContainedIn
@FieldBridge(impl = CollectionCountBridge.class)
@Field(analyze = Analyze.NO)
@OneToMany(cascade=CascadeType.ALL, fetch=FetchType.LAZY, mappedBy="TParent")
public Set<TChild> getTChildSet() {
return this.TChildSet;
}
和
@Indexed
@Entity
public class TChild implements java.io.Serializable {
.....
private TParent TParent;
@IndexedEmbedded
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="parent_id", nullable=false)
public TParent getTParent() {
return this.TParent;
}
感谢 Don Roby,我已经应用了这个 CustomBridge
public class CollectionCountBridge extends IntegerBridge {
@Override
public String objectToString(Object object) {
if (object == null || (!(object instanceof Collection))) {
return null;
}
Collection<?> coll = (Collection<?>) object;
int size = coll.size();
System.out.println("col.size(): " + size);
return super.objectToString(size);
}
}
我正在列出 TParents。我正在尝试按 TChildSet 计数对它们进行排序。当我首先构建索引时,它可以完美运行。我可以列出 TParent 并按 TChild 的数量对它们进行排序。
FullTextQuery fullTextQuery = fullTextSession.createFullTextQuery(luceneQuery, TParent.class);
fullTextQuery.setSort(new Sort(new SortField("TChildSet", SortField.INT, true)));
现在...
当我添加一个新的 TChild 时,将执行 CustomBridge 代码。当我添加 TChild's 时,我希望看到排序发生变化。
我可以看到 TChild 计数增加了(根据 CustomBridge 代码中的 System.out.println())。
但是,查询没有正确排序它们。最初构建索引时的原始排序顺序仍然存在。添加新的 TChild 对排序顺序没有影响。我猜索引没有更新,但我不确定。
任何帮助或指示都会很棒。
非常感谢
约翰
编辑 直接的问题是索引中的值没有更新。这可以通过 Luke 看到。