﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
31340	Improve expression support for __search lookup and SearchQuery	Baptiste Mispelon	Baptiste Mispelon	"''(not sure whether to categorize this as a bug or a new feature)''

I've been trying to implement some kind of reverse full text search where I store keywords in the database and I want to query models whose keywords would match a given piece of text.

Here's a simplified model of what I'm working with:
{{{#!python
class SavedSearch(models.Model):
    keywords = models.TextField()

    def __str__(self):
        return self.keywords
}}}

I've managed to achieve what I want in the case of the default search configuration using annotation and wrapping things with `Value` or `Cast`:

{{{#!python
# This works
search_query = Cast('keywords', output_field=SearchQueryField())
search_vector = SearchVector(Value(""lorem ipsum ..."", output_field=TextField()))
qs = SavedSearch.objects.annotate(search=search_vector).filter(search=search_query)
}}}

But if I want to use a custom search configuration, things don't work anymore:

{{{#!python
# This doesn't work (can't adapt type 'F')
search_query = SearchQuery(F('keywords'), config='english', search_type='plain')
search_vector = SearchVector(Value(""lorem ipsum ..."", output_field=TextField()))
qs = SavedSearch.objects.annotate(search=search_vector).filter(search=search_query)
}}}

I'm not very familiar with the inner workings of `Lookup` objects but I did some digging and I think I came up with a fix which involved fixing two separate issues:

1) `SearchQuery` doesn't currently support anyting other than plain values (`str`). Fixing this required changing both `resolve_expression()` and `as_sql()`.
2) the `__search` lookup doesn't support things like `F` objects because of it assumes that any value with a `resolve_expression` method must be a `SearchQuery` object."	New feature	closed	contrib.postgres	dev	Normal	fixed			Ready for checkin	1	0	0	0	0	0
