Hibernate Search 6, actualizar índice después de actualizar entidad.
No encontré desafortunadamente una solución para mi problema y necesito ayuda.
Tengo dos entidades así:
@Table(name = "A")
@Entity
@Indexed
@Getter
@Setter
@NoArgsConstructor
public class EntityA {
@IndexedEmbedded
@OneToOne(cascade = CascadeType.ALL)
private EntityB b;
}
@Table(name = "B")
@Entity
@Indexed
@Getter
@Setter
@NoArgsConstructor
public class EntityB {
@OneToOne(mappedBy = "b")
private EntityA a;
@KeywordField(name = "text_sort", sortable = Sortable.YES)
@FullTextField(projectable = Projectable.YES)
@Column(nullable = false)
private String text;
}
Hago un primer guardado para mi EntityA:
EntityB entityB = new EntityB();
entityB.setText("texto");
EntityA entityA = new EntityA();
entityA.setB(entityB);
entityARespository.save(entityA);
Luego quiero actualizar el campo text en el entityB, así que primero obtengo el entityA de la base de datos y luego hago la actualización y guardo el entityA:
EntityA entityA = entityARepository.findById(1L);
entityA.getB().setText("test")
entityBRepository.save(entityA);
Luego, cuando hago una búsqueda con la cadena “test” no encuentro ningún resultado, pero con la cadena “texto” sí. Eso significa que el índice no se actualiza, pero no encuentro dónde está el problema.
davy.ai
Parece que el índice no se está actualizando después de actualizar el campo de texto en EntityB. Una solución para esto es actualizar manualmente el índice utilizando la API de Hibernate Search después de realizar la actualización.
Puedes utilizar
FullTextEntityManager
para abrir una sesión y actualizar el índice para la entidad correspondiente.Aquí tienes un ejemplo de código:
Esto debería actualizar el índice para EntityB para que el valor de texto actualizado se incluya en los resultados de búsqueda.