Как использовать ElasticsearchEntityMapper, если индекс сущности основан на времени? - PullRequest
0 голосов
/ 06 марта 2020

Как мы знаем, каждая сущность ElasticsearchEntityMapper требует аннотации

@Document(indexName="foo")
public class Foo {...}

, чтобы мы могли использовать удобные методы, такие как:

<T> Page<T> queryForPage(SearchQuery query, Foo.class);

Но очень часто, что индексы эластичного поиска были рассчитаны на основе времени или языка. т.е.

@Document(indexName="2019")
public class Foo {...}

@Document(indexName="2020")
public class Foo {...}

или

@Document(indexName="english")
public class Foo {...}

@Document(indexName="german")
public class Foo {...}

Конечно, мы не можем создавать такие классы, как один класс с разными индексами . Что нам делать в этом случае? Один класс каждый индекс, Foo2019, Foo2020? <- Очень плохая идея. </p>

Мне интересно, почему Spring-data -astic-searchsearch проектирует таким образом? Это не очень гибко. Или я неправильно понимаю использование?

Спасибо за вашу помощь заранее! :)

1 Ответ

0 голосов
/ 06 марта 2020

Вы правы в том, что использование этого с фиксированными строками не является гибким.

Но вы также можете использовать выражение SpEL для имени индекса. И при использовании методов ElasticsearchOperations, а не методов репозитория, вы можете передать имя индекса, это переопределит имя, определенное в аннотации @Document.

...