Обновление сопоставления ElasticSearch в рабочей среде (шины)

Я хотел бы иметь четкое представление о том, как бороться со следующим сценарием:

Я добавляю или удаляю атрибут из модели ActiveRecord, поэтому хочу обновить его сопоставление в ElasticSearch в рабочей среде.

Насколько я понял, я должен...

1- создайте новый индекс и импортируйте все из mysql

Это правильная команда? rake environment tire:import CLASS='Bow' INDEX='new-bows' Чтобы создать правильное сопоставление, я уже должен был обновить свое сопоставление в модели, верно?

2- удалите старое сопоставление и создайте псевдоним с именем bows для new-bows

Я бы так сделал, это правильно?

old_index_name = Bow.tire.index.name
Bow.tire.index.delete
alias = Tire::Alias.new
alias.name(old_index_name)
alias.index('new-bows')
alias.save

3- перезапустить приложение


Я что-то упускаю или есть более простой способ добиться желаемого с помощью Tire?

В какой момент следует удалить старый индекс? Перед созданием одноименного псевдонима или можно после?


person Robin    schedule 12.03.2013    source источник
comment
Привет, я использую задачу импорта в модели с 10 миллионами строк и выгружаю много данных в индекс для каждой записи. Любая приблизительная оценка, сколько времени это займет? Моя последняя проверка на 5% заняла около 8 часов. Это нормально?   -  person Arindam    schedule 23.06.2014
comment
Вы должны загрузить ассоциации? Если это так, не забудьте загрузить их. Я думаю, что для этого есть вариант, в противном случае я бы предложил сделать импорт самостоятельно с помощью Tire.index(index_name).import batch. Попробуйте определить, какая часть может занять больше времени. Проблема, вероятно, связана с объемом данных, которые у вас есть для каждой записи. В прошлом я имел дело с миллионами записей, но это было намного быстрее, чем 62,5 тыс. записей в час.   -  person Robin    schedule 23.06.2014


Ответы (2)


Вы должны сохранить старый индекс до тех пор, пока не будете уверены, что новый индекс на 100% соответствует вашим потребностям. Вы можете перевернуть псевдоним обратно, если это не так.

В наборе тестов Tire есть интеграционный тест для «переворачивания псевдонимов».

person karmi    schedule 13.03.2013
comment
Извините за задержку. Не уверен, что понимаю, как протестировать новый индекс. Должен ли я указывать свое приложение на новый индекс? Потому что я не могу назвать псевдоним так же, как существующий индекс, поэтому... (плюс, если бы вы могли дать быстрое определение индекса, я путаю этот термин с индексом). Спасибо :) - person Robin; 17.03.2013
comment
Дело в том, что вы можете оставить старый индекс как есть. Нет необходимости удалять его, если вам не нужно место на диске/и т.д. Код Ruby, который вы разместили, в порядке и делает то, что вам нужно, хотя сначала вам нужно создать новый индекс: Bow.tire.create_elasticsearch_index - person karmi; 18.03.2013
comment
Ну, на самом деле я не могу сделать alias.name(old_index_name); a.save, если сначала не удалю индекс. Конфликт имен. Поэтому мне нужно указать свое приложение на псевдоним в первую очередь, чтобы я мог перевернуть его и оставить индекс в покое, я думаю. - person Robin; 18.03.2013
comment
› Итак, в первую очередь мне нужно указать псевдоним для моего приложения -- Да, абсолютно. - person karmi; 20.03.2013

Чтобы добавить новый столбец в индекс:

index = Tire.index("articles")

index.mapping("article", :properties => { :pinterest_shares => {:type => 'integer', :index => 'not_analyzed', :include_in_all => false} })
person Henley    schedule 14.09.2013