Skip to content

Commit a6dbefc

Browse files
authored
Merge pull request #5239 from rtfd/fix-reindexing
Support passing an explicit `index_name` for search indexing
2 parents 8f0c78d + f39e0d5 commit a6dbefc

File tree

2 files changed

+17
-2
lines changed

2 files changed

+17
-2
lines changed

readthedocs/search/management/commands/reindex_elasticsearch.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
class Command(BaseCommand):
1919

2020
@staticmethod
21-
def _get_indexing_tasks(app_label, model_name, queryset, document_class):
21+
def _get_indexing_tasks(app_label, model_name, index_name, queryset, document_class):
2222
total = queryset.count()
2323
chunks = get_chunk(total, settings.ES_TASK_CHUNK_SIZE)
2424

@@ -27,6 +27,7 @@ def _get_indexing_tasks(app_label, model_name, queryset, document_class):
2727
'app_label': app_label,
2828
'model_name': model_name,
2929
'document_class': document_class,
30+
'index_name': index_name,
3031
'chunk': chunk
3132
}
3233
yield index_objects_to_es.si(**data)
@@ -62,6 +63,7 @@ def _run_reindex_tasks(self, models, queue):
6263

6364
indexing_tasks = self._get_indexing_tasks(app_label=app_label, model_name=model_name,
6465
queryset=queryset,
66+
index_name=new_index_name,
6567
document_class=str(doc))
6668

6769
post_index_task = switch_es_index.si(app_label=app_label, model_name=model_name,

readthedocs/search/tasks.py

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,9 @@
1010

1111

1212
@app.task(queue='web')
13-
def index_objects_to_es(app_label, model_name, document_class, chunk=None, objects_id=None):
13+
def index_objects_to_es(
14+
app_label, model_name, document_class, index_name=None, chunk=None, objects_id=None
15+
):
1416

1517
assert not (chunk and objects_id), "You can not pass both chunk and objects_id"
1618

@@ -31,9 +33,20 @@ def index_objects_to_es(app_label, model_name, document_class, chunk=None, objec
3133
elif objects_id:
3234
queryset = queryset.filter(id__in=objects_id)
3335

36+
if index_name:
37+
# Hack the index name temporarily for reindexing tasks
38+
old_index_name = document._doc_type.index
39+
document._doc_type.index = index_name
40+
log.info('Replacing index name %s with %s', old_index_name, index_name)
41+
3442
log.info("Indexing model: {}, '{}' objects".format(model.__name__, queryset.count()))
3543
doc_obj.update(queryset.iterator())
3644

45+
if index_name:
46+
log.info('Undoing index replacement, settings %s with %s',
47+
document._doc_type.index, old_index_name)
48+
document._doc_type.index = old_index_name
49+
3750

3851
@app.task(queue='web')
3952
def delete_objects_in_es(app_label, model_name, document_class, objects_id):

0 commit comments

Comments
 (0)