sql >> データベース >  >> RDS >> PostgreSQL

トリグラムの類似性と全文検索をpostgresを使用してQinddjangoと組み合わせた場合のパフォーマンスの低下

    クラスコードがないと、クエリを最適化するためのより良い方法を見つけるのは困難です。

    ジン を追加できます または要点 トリグラムの類似性を高速化するためのインデックス。

    SearchVector を使用してアノテーションを作成できます 以下のように:

    from django.contrib.postgres.aggregates import StringAgg
    from django.contrib.postgres.search import SearchQuery, SearchVector
    
    search_vectors = (
        SearchVector('vision_expertise') +
        SearchVector('bio_description') +
        SearchVector(StringAgg('experiences__description', delimiter=' ')) +
        SearchVector(StringAgg('educations__description', delimiter=' ')) +
        SearchVector(StringAgg('publications__description', delimiter=' '))
    )
    
    Profile.objects.annotate(
        search=search_vectors
    ).filter(
        Q(search=SearchQuery(search_term)) |
        Q(first_name__trigram_similar=search_term) |
        Q(last_name__trigram_similar=search_term) |
        Q(educations__degree__trigram_similar=search_term) |
        Q(educations__field_of_study__trigram_similar=search_term) |
        Q(educations__school__trigram_similar=search_term) |
        Q(experiences__title__trigram_similar=search_term) |
        Q(experiences__company__trigram_similar=search_term) |
        Q(publications__title__trigram_similar=search_term) |
        Q(certification__certification_name__trigram_similar=search_term) |
        Q(certification__certification_authority__trigram_similar=search_term)
    )
    

    を使用して、全文検索を高速化できます。 SearchVectorField

    全文検索とトリグラムについて調べるには、私がこのテーマについて書いた記事を読むことができます:

    "全文検索PostgreSQLを使用したDjango」



    1. 日付列のSQLカウント

    2. SQL * Plusは、SQLDeveloperが実行するSQLスクリプトを実行しません

    3. エンティティフレームワークにID列を挿入させるにはどうすればよいですか?

    4. WHERE vs HAVING