我有一个应用程序,允许用户搜索+/- 100,000文档的数据库中的关键字/句子。
我正在使用Django 1.11和documentation
中描述的Postgres FullTextSearch功能但是,我遇到了以下问题,我想知道是否有人知道解决方案:
我想为提供的查询集中的每个单词创建一个SearchQuery
object,如下所示:
query typed in by the user in the input field:
[' 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程序似乎是一个非常复杂的解决方案。有谁知道更好的方法来实现这个目标?
答案 0 :(得分:1)
我从未使用它,但要进行动态查询,您可以循环添加。
compound_statement = SearchQuery(list_of_words[0])
for term in list_of_words[1:]:
compound_statement = compound_statement | SearchQuery(term)
但文档告诉我们
你确定需要这个吗?默认情况下,用户提供的所有单词都通过词干分析算法传递,然后查找所有结果词的匹配项。