Spring Data MongoDB: индекс @TextIndexed уже существует с различными параметрами - PullRequest
0 голосов
/ 17 февраля 2020

Представьте себе, у вас есть коллекция MongoDB, которая отображается в простую сущность в приложении Spring Boot:

@Document
data class Question(
    @Id val id: String,

    @TextIndexed
    val topic: String
)

Теперь вы хотите добавить новое поле и включить его в полнотекстовый поиск. Вы вносите простую модификацию:

@Document
data class Question(
    @Id val id: String,

    @TextIndexed
    val topic: String,

    @TextIndexed
    val description: String
)

Чтобы проверить это изменение, вы запускаете базу данных MongoDB, запускаете приложение, скрестив пальцы, и BOOM !!! Вы получаете следующее исключение при инициализации:

Caused by: org.springframework.dao.DataIntegrityViolationException:
    Cannot create index for '' in collection 'question' with keys 'Document{{topic=text, description=text}}' and options 'Document{{name=Question_TextIndex}}'. Index already defined as 'IndexInfo [indexFields=[IndexField [ key: topic, direction: null, type: TEXT, weight: 1.0]], name=Question_TextIndex, unique=false, sparse=false, language=english, partialFilterExpression=null, collation=null]'.;
nested exception is com.mongodb.MongoCommandException:
    Command failed with error 85: 'Index with name: Question_TextIndex already exists with different options' on server localhost:27017. The full response is { "ok" : 0.0, "errmsg" : "Index with name: Question_TextIndex already exists with different options", "code" : 85, "codeName" : "IndexOptionsConflict" }
...

Похоже, Spring Data автоматически создает новый текстовый индекс, который конфликтует с существующим по имени. Как «сообщить» Spring Data, что мне нужно изменить (заменить / изменить) существующий индекс? Или может как-то создать индекс с новым именем? Как можно решить такие конфликты в Spring Data?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...