目标是快速搜索相似值,按相似性顺序排列。
这是Django中的查询:Model.objects.annotate(similarity=TrigramSimilarity('field_name', query)).filter(similarity__gt=0.3).order_by('-similarity').values('field_name')[0: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中运行此命令:
SELECT field_name FROM table WHERE field_name % 'query_value' ORDER BY similarity(field_name, 'query_value') DESC LIMIT 30
它的速度快得多,而且输出正确。除了输入原始sql命令之外,如何使用Django实现这一点?
另一个问题是如何将SELECT DISTINCT字段名添加到该字段中。目前,当我试图添加它时,我得到ERROR: for SELECT DISTINCT, ORDER BY expressions must appear in select list即使我只使用ORDER BY simlarity函数中的选定字段名。
谢谢!

最佳答案

有点老问题,但我把三联图弄乱了,碰到了类似的问题。
非常重要的一点是(正如这里提到的-https://dba.stackexchange.com/questions/103821/best-index-for-similarity-function/103823#103823)在使用函数时不使用索引!你必须使用operator-so%

10-06 15:49