Как я могу вручную удалить индекс определенной записи с помощью Searchkick. Существует возможность переиндексировать конкретную запись, но я не нашел возможности удалить индекс записи.
product = Product.find 10
product.reindex
Как я могу вручную удалить индекс определенной записи с помощью Searchkick. Существует возможность переиндексировать конкретную запись, но я не нашел возможности удалить индекс записи.
product = Product.find 10
product.reindex
Чтобы удалить из индекса:
product = Product.find 10
Product.searchkick_index.remove(product)
Если кто-то ищет, как удалить и сдуть весь индекс, чтобы начать заново, вы можете сделать это так:
MyModel.searchkick_index.delete && MyModel.searchkick_index.create
Учитывая product = Product.find(10)
.
Если product.should_index?
возвращает false
, product.reindex
удалит эту запись из индекса.
Если вам нужно вручную удалить запись, Product.searchkick_index.remove(product)
— это то, что вам нужно.
should_index?
равно false
, он не только пропускает переиндексацию, но и удаляет все существующие записи. Я бы предположил, что should_index?
будет использоваться для пропуска ненужной переиндексации, когда обновляются только неиндексированные поля и т. д.
- person Joshua Pinter; 29.12.2019
Что делать, если у вас есть только идентификатор удаленной модели? например. в случае, когда вы получаете вызов в фоновом режиме?
Глядя на исходный код, searchkick проверяет только класс объекта для определения индекса и получает идентификатор объекта, поэтому вы можете сделать что-то вроде этого, чтобы обойти это:
# given value id holding the record id of the deleted model record (eg. Product with id 123)
prod = Product.new(id: id)
Product.searchkick_index.remove(prod)
Хаково, но работает: P