我正在使用Django 2.0和postgresql 9.6。
我在postgresql
中安装了pg_trgm扩展名我试图理解三角星是如何工作的:我正在尝试以下方法。我想要更接近" sridam"使用triagram进行匹配
from django.contrib.postgres.search import TrigramDistance
from django.contrib.postgres.search import SearchQuery, SearchRank, SearchVector
vector = SearchVector('title',config='english_unaccent', weight='A') + SearchVector('description',config='english_unaccent', weight='B')
query = SearchQuery('sridam',config='english_unaccent')
Article.objects.annotate(distance=TrigramDistance(vector, query)).filter(distance__lte=0.7).order_by('distance')
ProgrammingError: operator does not exist: tsvector <-> tsquery
LINE 1: ...SCE("articles_article"."description", '')), 'B')) <-> plaint...
^
HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts.
答案 0 :(得分:0)
您无法计算SearchVector
和SearchQuery
之间的Trigram距离,因为&#34;三元组是一组三个连续的字符。&#34; < / em>的
根据Django documentation TrigramDistance
&#34;中的规定,接受字段名称或表达式以及字符串或表达式。返回两个参数之间的Trigram距离。&#34; 。
答案 1 :(得分:0)
在使用postgres扩展之前,您必须将扩展迁移应用于模型。
制作空的迁移文件:
$array1 = getSomeBigArray();
$array2 = getAnotherBigArray();
combineArrays($array1, $array2);
$results[] = $array1;
function combineArrays(&$array1, $array2){
foreach($array2 as $value){
if($value > 0){
$array1[] = $value;
}
}
// void function
}
然后转到新的迁移文件并添加以下内容
python3 manage.py makemigrations --empty yourapp
最后运行from django.db import migrations
from django.contrib.postgres.operations import TrigramExtension
class Migration(migrations.Migration):
operations = [
TrigramExtension()
]
以将迁移应用于数据库,您就可以使用扩展了。
您可以转到python3 manage.py migrate
控制台并直接应用迁移:
psql