Searchkick вручную удаляет определенную запись Index

Как я могу вручную удалить индекс определенной записи с помощью Searchkick. Существует возможность переиндексировать конкретную запись, но я не нашел возможности удалить индекс записи.

 product = Product.find 10
 product.reindex

person kashif    schedule 24.02.2015    source источник


Ответы (4)


Чтобы удалить из индекса:

product = Product.find 10
Product.searchkick_index.remove(product)
person Rodrigo    schedule 24.02.2015

Если кто-то ищет, как удалить и сдуть весь индекс, чтобы начать заново, вы можете сделать это так:

MyModel.searchkick_index.delete &&  MyModel.searchkick_index.create
person Nathan Bertram    schedule 27.07.2015

Учитывая product = Product.find(10).

Если product.should_index? возвращает false, product.reindex удалит эту запись из индекса.

Если вам нужно вручную удалить запись, Product.searchkick_index.remove(product) — это то, что вам нужно.

person XML Slayer    schedule 30.10.2015
comment
Вы в этом уверены? Я только что проверил это на 3.1.3, и он не удалил запись из индекса. Несмотря на это, я не думаю, что интуитивно понятно, что когда 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

person foomip    schedule 29.07.2020