2017-04-27 46 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

非常感謝!

回答

相關問題