Hibernate Search @IndexedEmbedded



У меня есть похожая ситуация, как Эта



@Entity
@Indexed
public class Place {
@Id
@GeneratedValue
@DocumentId
private Long id;

@Field( index = Index.TOKENIZED )
private String name;

@OneToOne( cascade = { CascadeType.PERSIST, CascadeType.REMOVE } )
@IndexedEmbedded
private Address address;
....
}

@Entity
public class Address {
@Id
@GeneratedValue
private Long id;

@Field(index=Index.TOKENIZED)
private String street;

@Field(index=Index.TOKENIZED)
private String city;

@ContainedIn
@OneToMany(mappedBy="address")
private Set<Place> places;
...
}


Теперь проблема заключается в следующем:
Если я изменю, например, поле name в entity Place , какие сущности будут повторно проиндексированы?



1) только поле name ?



2) целое место сущность?



3) Вся сущность места и сущности, аннотированные @IndexedEmbedded ?



Тот, кто мне нужен для моей цели, будет третьим. Так что если это не стандарт, может ли быть какое-либо решение для достижения такого поведения?
548   2  

2 ответов:

К счастью, это действительно третий, так что мне повезло, и он работает, как и ожидалось

Вы можете использовать следующий код для повторного индексирования объекта Place вручную

public void updateIndex(T entity){
        FullTextEntityManager fullTextEntityManager = Search.getFullTextEntityManager(em);
        fullTextEntityManager.index(entity);
        fullTextEntityManager.getSearchFactory().optimize(entity.getClass());
    }

Во-вторых, если вы используете hibernate, вы можете настроить lucene в persistence.xml для автоматического обновления индексов изменяемых сущностей

Comments

    Ничего не найдено.