目标是根据相似性的顺序快速搜索相似值。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
。
非常感谢!