2017-04-27 45 views
0

目标是根据相似性的顺序快速搜索相似值。Django Trigram相似查询速度不及原始查询的结果相同

这是在Django查询:Model.objects.annotate(similarity=TrigramSimilarity('field_name', query)).filter(similarity__gt=0.3).order_by('-similarity').values('field_name')[0:30]

上述被转换成此查询:

SELECT field_name FROM table WHERE field_name % 'query_value' ORDER BY similarity(field_name, 'query_value') DESC LIMIT 30

SELECT "table"."field_name" FROM "table" WHERE SIMILARITY("table"."field_name", query_value) > 0.3 ORDER BY SIMILARITY("table"."field_name", query_value) DESC LIMIT 30

这需要约1.3秒,但如果我在psql里运行此

它更快,并具有相同的正确输出。除了放入原始的sql命令之外,我怎样才能用Django来实现呢?

另一个问题是如何添加SELECT DISTINCT field_name。目前,在尝试添加它时,即使我仅在ORDER BY模拟函数中使用了选定的field_name,我也会得到ERROR: for SELECT DISTINCT, ORDER BY expressions must appear in select list

非常感谢!

回答

相关问题