kopia lustrzana https://github.com/wagtail/wagtail
Merge 3fbfe42cf4
into 74b5933ae7
commit
3b0026ee09
|
@ -221,12 +221,16 @@ class Index:
|
||||||
).exclude(object_id__in=existing_pks)
|
).exclude(object_id__in=existing_pks)
|
||||||
stale_entries.delete()
|
stale_entries.delete()
|
||||||
|
|
||||||
def delete_stale_entries(self):
|
def delete_stale_entries(self, models=None):
|
||||||
for model in get_indexed_models():
|
if models:
|
||||||
# We don’t need to delete stale entries for non-root models,
|
for model in models:
|
||||||
# since we already delete them by deleting roots.
|
|
||||||
if not model._meta.parents:
|
|
||||||
self.delete_stale_model_entries(model)
|
self.delete_stale_model_entries(model)
|
||||||
|
else:
|
||||||
|
for model in get_indexed_models():
|
||||||
|
# We don’t need to delete stale entries for non-root models,
|
||||||
|
# since we already delete them by deleting roots.
|
||||||
|
if not model._meta.parents:
|
||||||
|
self.delete_stale_model_entries(model)
|
||||||
|
|
||||||
def add_item(self, obj):
|
def add_item(self, obj):
|
||||||
self.add_items(obj._meta.model, [obj])
|
self.add_items(obj._meta.model, [obj])
|
||||||
|
@ -614,8 +618,8 @@ class MySQLSearchRebuilder:
|
||||||
def __init__(self, index):
|
def __init__(self, index):
|
||||||
self.index = index
|
self.index = index
|
||||||
|
|
||||||
def start(self):
|
def start(self, models=None):
|
||||||
self.index.delete_stale_entries()
|
self.index.delete_stale_entries(models)
|
||||||
return self.index
|
return self.index
|
||||||
|
|
||||||
def finish(self):
|
def finish(self):
|
||||||
|
|
|
@ -232,12 +232,16 @@ class Index:
|
||||||
).exclude(object_id__in=existing_pks)
|
).exclude(object_id__in=existing_pks)
|
||||||
stale_entries.delete()
|
stale_entries.delete()
|
||||||
|
|
||||||
def delete_stale_entries(self):
|
def delete_stale_entries(self, models=None):
|
||||||
for model in get_indexed_models():
|
if models:
|
||||||
# We don’t need to delete stale entries for non-root models,
|
for model in models:
|
||||||
# since we already delete them by deleting roots.
|
|
||||||
if not model._meta.parents:
|
|
||||||
self.delete_stale_model_entries(model)
|
self.delete_stale_model_entries(model)
|
||||||
|
else:
|
||||||
|
for model in get_indexed_models():
|
||||||
|
# We don’t need to delete stale entries for non-root models,
|
||||||
|
# since we already delete them by deleting roots.
|
||||||
|
if not model._meta.parents:
|
||||||
|
self.delete_stale_model_entries(model)
|
||||||
|
|
||||||
def add_item(self, obj):
|
def add_item(self, obj):
|
||||||
self.add_items(obj._meta.model, [obj])
|
self.add_items(obj._meta.model, [obj])
|
||||||
|
@ -662,8 +666,8 @@ class PostgresSearchRebuilder:
|
||||||
def __init__(self, index):
|
def __init__(self, index):
|
||||||
self.index = index
|
self.index = index
|
||||||
|
|
||||||
def start(self):
|
def start(self, models=None):
|
||||||
self.index.delete_stale_entries()
|
self.index.delete_stale_entries(models)
|
||||||
return self.index
|
return self.index
|
||||||
|
|
||||||
def finish(self):
|
def finish(self):
|
||||||
|
|
|
@ -70,9 +70,9 @@ class Command(BaseCommand):
|
||||||
self.write("Backend '%s' doesn't require rebuilding" % backend_name)
|
self.write("Backend '%s' doesn't require rebuilding" % backend_name)
|
||||||
return
|
return
|
||||||
|
|
||||||
models_grouped_by_index = group_models_by_index(
|
indexed_models = getattr(self, "only_models", get_indexed_models())
|
||||||
backend, get_indexed_models()
|
models_grouped_by_index = group_models_by_index(backend, indexed_models).items()
|
||||||
).items()
|
|
||||||
if not models_grouped_by_index:
|
if not models_grouped_by_index:
|
||||||
self.write(backend_name + ": No indices to rebuild")
|
self.write(backend_name + ": No indices to rebuild")
|
||||||
|
|
||||||
|
@ -81,7 +81,11 @@ class Command(BaseCommand):
|
||||||
|
|
||||||
# Start rebuild
|
# Start rebuild
|
||||||
rebuilder = backend.rebuilder_class(index)
|
rebuilder = backend.rebuilder_class(index)
|
||||||
index = rebuilder.start()
|
|
||||||
|
if getattr(self, "only_models", None):
|
||||||
|
index = rebuilder.start(models)
|
||||||
|
else:
|
||||||
|
index = rebuilder.start()
|
||||||
|
|
||||||
# Add models
|
# Add models
|
||||||
for model in models:
|
for model in models:
|
||||||
|
@ -138,6 +142,14 @@ class Command(BaseCommand):
|
||||||
type=int,
|
type=int,
|
||||||
help="Set number of records to be fetched at once for inserting into the index",
|
help="Set number of records to be fetched at once for inserting into the index",
|
||||||
)
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
"--only",
|
||||||
|
action="store",
|
||||||
|
dest="only_models",
|
||||||
|
default=None,
|
||||||
|
type=str,
|
||||||
|
help="Only update indexes on certain models. (comma separated, '?' to get list of options)",
|
||||||
|
)
|
||||||
|
|
||||||
def handle(self, **options):
|
def handle(self, **options):
|
||||||
self.verbosity = options["verbosity"]
|
self.verbosity = options["verbosity"]
|
||||||
|
@ -153,6 +165,19 @@ class Command(BaseCommand):
|
||||||
# index the 'default' backend only
|
# index the 'default' backend only
|
||||||
backend_names = ["default"]
|
backend_names = ["default"]
|
||||||
|
|
||||||
|
if options["only_models"]:
|
||||||
|
all_models = {model._meta.label: model for model in get_indexed_models()}
|
||||||
|
if options["only_models"] == "?":
|
||||||
|
self.stdout.write(",".join(all_models.keys()))
|
||||||
|
return
|
||||||
|
self.only_models = []
|
||||||
|
for model_label in options["only_models"].split(","):
|
||||||
|
model = all_models.get(model_label, None)
|
||||||
|
if model:
|
||||||
|
self.only_models.append(model)
|
||||||
|
else:
|
||||||
|
self.stderr.write(f"{model_label} is not a valid model name")
|
||||||
|
return
|
||||||
# Update backends
|
# Update backends
|
||||||
for backend_name in backend_names:
|
for backend_name in backend_names:
|
||||||
self.update_backend(
|
self.update_backend(
|
||||||
|
|
Ładowanie…
Reference in New Issue