Django postgress-动态SearchQuery对象创建
我有一个应用程序,用户可以在+/-100000个文档的数据库中搜索关键字/句子 我正在使用Django 1.11和中描述的Postgres FullTextSearch功能 但是,我遇到了以下问题,我想知道是否有人知道解决方案: 我想为提供的查询集中的每个单词创建一个,如下所示:Django postgress-动态SearchQuery对象创建,django,postgresql,django-postgresql,Django,Postgresql,Django Postgresql,我有一个应用程序,用户可以在+/-100000个文档的数据库中搜索关键字/句子 我正在使用Django 1.11和中描述的Postgres FullTextSearch功能 但是,我遇到了以下问题,我想知道是否有人知道解决方案: 我想为提供的查询集中的每个单词创建一个,如下所示: 用户在输入字段中键入的查询:['term1','term2','term3'] query = SearchQuery('term1') | SearchQuery('term2') | SearchQuery('t
用户在输入字段中键入的查询:
['term1','term2','term3']
query = SearchQuery('term1') | SearchQuery('term2') | SearchQuery('term3')
vector = SearchVector('text')
Document.objects.annotate(rank=SearchRank(vector, query)).order_by('-rank').annotate(similarity=TrigramSimilarity(vector, query).filter(simularity__gt=0.3).order_by('-simularity')
问题是我在示例中的查询中使用了3个术语,但我希望这个数字是动态的。用户也可以提供1个或10个术语,但我不知道如何将相关代码添加到查询分配中
我简单地考虑过让程序将这样的内容写入一个空文档:
for query in terms:
file.write(' | (SearchQuery( %s )' % query ))
但是让一个python程序编写python代码似乎是一个非常复杂的解决方案。有谁知道更好的方法来实现这一点吗?我从未使用过它,但要进行动态查询,您只需循环并添加即可
compound_statement = SearchQuery(list_of_words[0])
for term in list_of_words[1:]:
compound_statement = compound_statement | SearchQuery(term)
但是文件告诉我们
默认情况下,用户提供的所有单词都会通过词干算法传递,然后它会查找所有结果词的匹配项
您确定需要这个吗?谢谢您的回复!我想我可能误解了文件。那里的示例似乎指定了单独的SearchQuery对象,并与OR语句的“|”连接在一起。我的理解正确吗?相反,我可以只为单个SearchQuery对象提供一个列表,它将具有相同的效果?