Поиск в спящем режиме @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 в объекте Place, какие объекты будут переиндексированы?

1) Только поле имя?

2) Весь объект Place?

3) Весь объект Place и объекты, аннотированные с помощью @IndexedEmbedded?

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


person Hons    schedule 14.09.2011    source источник


Ответы (2)


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

person Hons    schedule 15.12.2011

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

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

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

person Kamran Ali    schedule 02.12.2011
comment
На самом деле это не то, что я ищу. Меня интересовал автоматический процесс - person Hons; 15.12.2011
comment
Можете ли вы привести пример этой конфигурации? - person alexander; 11.03.2015