2017-09-16 144 views
0

DjangoとPostgresqlプロジェクトで検索システムを作成しようとしていますが、クエリを作成しようとするとエラーが発生します。Django/Postgres - 指定された名前と引数の型に一致する関数がありません

私はシェルでこれらのコマンドを試してみてくださいたび:

vector = SearchVector('title','tags') 
query = SearchQuery('book') | SearchQuery('harry') 

My_Library.objects.annotate(similarity=TrigramSimilarity(vector,test),).filter(similarity__gt=0.3).order_by('-similarity') 

私はエラーを取得する:

「いいえ関数は、指定した名前と引数の型と一致していないあなたは明示的な型キャストを追加する必要があるかもしれません。」

私はしばらくの間、他のオプションをテストしてきた、と私は成功し、エラーなしで検索クエリを渡すことができる唯一の方法は、クエリベクトルの代わりに、2つの文字列を使用することです。

My_Library.objects.annotate(similarity=TrigramSimilarity('title','my search query'),).filter(similarity__gt=0.3).order_by('-similarity') 

これはエラーなく正常に検索にパスします。

なぜこのエラーが発生し、どのように修正できますか?

私はこのFull Text Searchドキュメント

答えて

0

TrigramSimilarityのオフに私のコードを基づかてきたあなたはそれをSearchVectorSearchQueryに合格しようとしている引数

として2 stringsをとります。

from django.db.models import Q 

My_Library.objects.annotate(
    Q(similarity=TrigramSimilarity('title','my search query'),)) | 
    Q(similarity=TrigramSimilarity('title','my search query'),)) 
    ).filter(similarity__gt=0.3).order_by('-similarity') 

詳細:、あなたが複数のタグで検索したい場合は、あなたはおそらく|、その後、ソートに類似した類似クエリの倍数を集約する必要があるようなものを

を動作しません on Q https://docs.djangoproject.com/en/1.11/ref/models/querysets/#q-objects

+0

これを試してみると、「Qは定義されていません」と表示されます。それはどこから手に入りましたか? – Mathyou

+1

django.db.modelsからインポートQ – MrE

+0

https://docs.djangoproject.com/en/1.11/ref/models/querysets/#q-objects – MrE

関連する問題