docs: def custom_filter_text(self, value, search):
          """Support general query using the 'text' attribute."""
          if isinstance(value, list):
              value = ' '.join(value)
  
          should = [
              Q('match', slug={'query': value, 'operator': 'and', 'boost': 10.0}),
              Q('match', **{'slug.ngrams': {'query': value, 'operator': 'and', 'boost': 5.0}}),
              Q('match', name={'query': value, 'operator': 'and', 'boost': 10.0}),
              Q('match', **{'name.ngrams': {'query': value, 'operator': 'and', 'boost': 5.0}}),
              Q('match', contributor_name={'query': value, 'operator': 'and', 'boost': 5.0}),
              Q('match', **{'contributor_name.ngrams': {'query': value, 'operator': 'and', 'boost': 2.0}}),
              Q('match', owner_names={'query': value, 'operator': 'and', 'boost': 5.0}),
              Q('match', **{'owner_names.ngrams': {'query': value, 'operator': 'and', 'boost': 2.0}}),
              Q('match', descriptor_data={'query': value, 'operator': 'and'}),
          ]
  
          # Add registered text extensions.
          for extension in composer.get_extensions(self):
              if hasattr(extension, 'text_filter'):
                  should += extension.text_filter(value)
  
          search = search.query('bool', should=should)
  
          return search