Searching for individual fields in a single search vector

I have a model with multiple fields that I want to be searchable, and I want to use a search vector in the database for searching. Let’s say my model is Song, and a song has several searchable fields: a title, a filename, and comment text. In addition, there is also a SearchVector field called search_document that is meant to be used in the search query. Here’s a simplified version of the class:

class Song(models.Model):

The search vector is populated via a signal. Whenever an object is saved, the signal creates a search vector using the following weighting:

def index_components(self):
        return {
            'A': self.title,
            'B': self.filename,
            'C': self.comment_text

The method called in the signal looks like this:

def make_updater(instance):
    components = instance.index_components()
    pk =

    def on_commit():
        search_vectors = []
        for weight, text in components.items():
                SearchVector(Value(text, output_field=TextField()), weight=weight)
            search_document=reduce(operator.add, search_vectors)

    return on_commit

And finally, a search query on the Song class looks like this:

    type=Value('song', output_field=CharField()),
    ).values('pk', 'type', 'rank')

This works, but it searches for all three fields together. I would like to also be able to search only for a particular field. In particular, I would like the search for comment_text to be optional, and to be able to search for title and filename without comment_text.

Is it possible to modify my query to only search for title and filename without comment_text while still keeping all three within the same SearchVectorField? Or will I need to store comment_text into a different SearchVectorField?