diff --git a/autocomplete_multi_models/business_process.py b/autocomplete_multi_models/business_process.py
index 763c7547ae495fcc8b68b3b8e20ff31a84425f7c..3f3ac196ef5ed17dabfcb06e64c098619e036d5e 100644
--- a/autocomplete_multi_models/business_process.py
+++ b/autocomplete_multi_models/business_process.py
@@ -14,6 +14,7 @@ _pattern = re.compile("[^\\w\\d]")
 _AUTOCOMPLETE_MIN_LENGTH = utils.DEFAULT_AUTOCOMPLETE_MIN_LENGTH
 _AUTOCOMPLETE_MIN_SIMILARITY = utils.DEFAULT_AUTOCOMPLETE_MIN_SIMILARITY
 _AUTOCOMPLETE_LIMIT = utils.DEFAULT_AUTOCOMPLETE_LIMIT
+_CAN_BE_INDEXED_BY_AUTOCOMPLETE_FUNCTION_NAME = utils.DEFAULT_CAN_BE_INDEXED_BY_AUTOCOMPLETE_FUNCTION_NAME
 
 
 def get_setting_from_storage(key, default):
@@ -49,6 +50,9 @@ def clean_duplicate():
 
 
 def add_instance_to_index(instance, field_names: List[str]):
+    f = getattr(instance, _CAN_BE_INDEXED_BY_AUTOCOMPLETE_FUNCTION_NAME, None)
+    if f and not f():
+        return
     for field_name in field_names:
         add_text_to_index(getattr(instance, field_name))
 
diff --git a/autocomplete_multi_models/tests/test_business_process.py b/autocomplete_multi_models/tests/test_business_process.py
index ccc820590051880a7350b24b086ba546e766a89d..722fa2bd6bc3ebdbdcc53b9427a5f511ff3a478e 100644
--- a/autocomplete_multi_models/tests/test_business_process.py
+++ b/autocomplete_multi_models/tests/test_business_process.py
@@ -145,3 +145,22 @@ class WithTextModelTestCase(test_helpers.WithTextModelTestCase):
 
         signals.instance_delete(sender=test_helpers.WithTextModel, instance=o, field_names=["text"])
         self.assertEqual(1, models.IndexedWord.objects.count())
+
+    def test_conditional_indexing(self):
+        # there is a function indicating that NONONO should be not indexed
+        test_helpers.WithTextModel.objects.create(text="NONONO")
+        test_helpers.WithTextModel.objects.create(text="YESYES")
+        for o in test_helpers.WithTextModel.objects.all():
+            signals.instance_update(sender=test_helpers.WithTextModel, instance=o, field_names=["text"])
+        self.assertFalse(models.IndexedWord.objects.filter(word="NONONO"), "Prevented by class implementation")
+        self.assertTrue(models.IndexedWord.objects.filter(word="YESYES"), "Prevented by class implementation")
+
+    def test_absence_of_conditional_indexing(self):
+        # we remove the function, all instance should be indexed
+        test_helpers.WithTextModel.objects.create(text="NONONO")
+        test_helpers.WithTextModel.objects.create(text="YESYES")
+        for o in test_helpers.WithTextModel.objects.all():
+            setattr(o, utils.DEFAULT_CAN_BE_INDEXED_BY_AUTOCOMPLETE_FUNCTION_NAME, None)
+            signals.instance_update(sender=test_helpers.WithTextModel, instance=o, field_names=["text"])
+        self.assertTrue(models.IndexedWord.objects.filter(word="NONONO"), "Prevented by class implementation")
+        self.assertTrue(models.IndexedWord.objects.filter(word="YESYES"), "Prevented by class implementation")
diff --git a/autocomplete_multi_models/tests/test_helpers.py b/autocomplete_multi_models/tests/test_helpers.py
index 8739e7545d53184ec075aabb58a26ca4c901ca75..5639221baa7e5aec5cd4507a8dbabfd23b559d8d 100644
--- a/autocomplete_multi_models/tests/test_helpers.py
+++ b/autocomplete_multi_models/tests/test_helpers.py
@@ -20,6 +20,9 @@ class WithTextModel(models.Model):
         managed = False
         db_table = 'unmanaged_with_text_table'
 
+    def can_be_indexed_by_autocomplete(self):
+        return self.text != "NONONO"
+
     def __str__(self):
         return self.text
 
diff --git a/autocomplete_multi_models/utils.py b/autocomplete_multi_models/utils.py
index 6931cc0b426cde8666b6e9c001f0900a13d3c58f..456bc4f7445a8d3bec23c3ebe9e50580ada3ec32 100644
--- a/autocomplete_multi_models/utils.py
+++ b/autocomplete_multi_models/utils.py
@@ -6,6 +6,7 @@ DEFAULT_AUTOCOMPLETE_MIN_LENGTH = 4
 DEFAULT_AUTOCOMPLETE_MIN_SIMILARITY = 0.3
 DEFAULT_AUTOCOMPLETE_LIMIT = 10
 REBUILD_NEEDED = "is_autocomplete_multi_models_rebuild_needed"
+DEFAULT_CAN_BE_INDEXED_BY_AUTOCOMPLETE_FUNCTION_NAME = "can_be_indexed_by_autocomplete"
 
 
 def get_indexed_fields():
@@ -33,6 +34,11 @@ def init_from_settings():
         'AUTOCOMPLETE_LIMIT',
         DEFAULT_AUTOCOMPLETE_LIMIT,
     )
+    business_process._CAN_BE_INDEXED_BY_AUTOCOMPLETE_FUNCTION_NAME = getattr(
+        settings,
+        'CAN_BE_INDEXED_BY_AUTOCOMPLETE_FUNCTION_NAME',
+        DEFAULT_CAN_BE_INDEXED_BY_AUTOCOMPLETE_FUNCTION_NAME,
+    )
     get_set_names = getattr(settings, 'AUTOCOMPLETE_PERSISTENT_VARIABLE_GETTER_SETTER', None)
     if get_set_names is not None:
         get_fcn = import_string(get_set_names[0])