Исходя из того, как вы описали свою модель, Hibernate Search сможет дать вам то, что вам нужно, довольно легко.
Похоже, вы ищете комбинацию встроенного индекса и фильтра. Я предполагаю, что у вас есть много-много отношений между объектом и ролью. Если это так, вы, вероятно, имеете что-то подобное в Object:
@ManyToMany
@JoinTable(name = "object_role",
joinColumns = @JoinColumn(name = "object_id"),
inverseJoinColumns = @JoinColumn(name = "role_id"))
private Set<Role> roles = new HashSet<Role>();
Чтобы взять роли и встроить их в состав индекса, созданного для объекта, вам нужно просто поставить @IndexedEmbedded(prefix = "somPrefixName")
над @ManyToMany
.
Затем вы можете определить фильтр, используя @FullTextFilterDef
, который просматривает этот встроенный индекс и фильтрует по заданной роли (которая, вероятно, будет ролью пользователя, выполняющего поиск). Это гарантирует, что поисковый запрос вернет только объекты, связанные с данной ролью.
Короче говоря, Hibernate Search сможет предоставить то, что вам нужно (при условии, что я правильно понимаю ваши требования). Я буду рад дать более подробную информацию о том, как, если вы хотите.