Автоматическое удаление индекса Grails Elasticsearch вызывает RoutingMissingException - PullRequest
0 голосов
/ 24 августа 2018

У меня проблема с автоматическим индексированием эластичного поиска и удалением домена из базы данных, что вызывает исключение RoutingMissingException. Если экземпляр поискового домена удаляется из базы данных ,asticsearch автоматически удаляет соответствующий документ из индекса. Проблема заключается в том, что экземпляр домена является дочерним, и требуется маршрутизация, поэтому создается исключение RoutingMissingException.

Я использую Grails 2.3.11, а также плагин эластичного поиска 1.2.0 с эластичным поиском 2.3.3. У моего индексаasticsearch есть два типа «родитель» и «ребенок» (переименованы для этого примера), которые, очевидно, имеют отношения родитель-ребенок.

Отображение ребенка:

"child": {
    "_all": {
        "analyzer": "german"
    },
    "_parent": {
        "type": "parent"
    },
    "_routing": {
        "required": true
    },
    ...

А в классе дочернего домена:

...

static belongsTo = [parent: Parent] 

static searchable = {
    ...
    parent parent: true, reference: true
    ...
}

Теперь, если я удалю экземпляр дочернего домена в методе:

...
def deletableChild = Child.load(params.id)
flow.parentInstance.removeFromChilds(deletableChild)
deletableChild.delete()
...

Я получаю следующую ошибку: ОШИБКА [12:44:17] [IndexRequestQueue]: сбой массового элемента: [index] RoutingMissingException [маршрутизация требуется для [index] / [child] / [3790]]

А в журнале эластичного поиска:

[2018-08-24 12:44:17,314][WARN ][action.delete            ] [Outrage] unexpected error during the primary phase for action [indices:data/write/delete], request [delete {[index][child][3790]}]
[index] RoutingMissingException[routing is required for [index]/[child]/[3790]]
    at org.elasticsearch.action.delete.TransportDeleteAction.resolveAndValidateRouting(TransportDeleteAction.java:118)
    at org.elasticsearch.action.delete.TransportDeleteAction.resolveRequest(TransportDeleteAction.java:100)
    at org.elasticsearch.action.delete.TransportDeleteAction.resolveRequest(TransportDeleteAction.java:54)

Если я установлю для disableAutoIndex значение true и вручную удаляю дочерний элемент из индекса с помощью? Routing = id & parent = id, это работает. Я пропускаю некоторые настройки, которые мне нужно сделать, чтобы autoIndex тоже работал или что-то в этом роде?

...