Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django postgress-动态SearchQuery对象创建_Django_Postgresql_Django Postgresql - Fatal编程技术网

Django postgress-动态SearchQuery对象创建

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

我有一个应用程序,用户可以在+/-100000个文档的数据库中搜索关键字/句子

我正在使用Django 1.11和中描述的Postgres FullTextSearch功能

但是,我遇到了以下问题,我想知道是否有人知道解决方案: 我想为提供的查询集中的每个单词创建一个,如下所示:

用户在输入字段中键入的查询:
['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对象提供一个列表,它将具有相同的效果?