代码之家  ›  专栏  ›  技术社区  ›  Santhosh

Django全文搜索:表示不存在uncent

  •  2
  • Santhosh  · 技术社区  · 6 年前

    我正在使用Django 2.0和postgresql 9.6

    我已经在我的应用程序(文章)中创建并清空了迁移文件,其中包含以下内容,以添加uncent和trigram扩展名

    # Generated by Django 2.0 on 2018-02-06 22:34
    
    from django.db import migrations
    from django.contrib.postgres.operations import UnaccentExtension, TrigramExtension
    
    
    class Migration(migrations.Migration):
    
        dependencies = [
            ('articles', '0012_auto_20180205_2234'),
        ]
    
        operations = [
            UnaccentExtension(),
            TrigramExtension()
        ]
    

    然后,我尝试运行以下查询:

    from django.contrib.postgres.search import SearchQuery, SearchRank, SearchVector
    vector = SearchVector('title',config='unaccent', weight='A') + SearchVector('description',config='unaccent', weight='B')
    query = SearchQuery('india')
    Article.objects.annotate(rank=SearchRank(vector, query)).filter(rank__gte=0.3).order_by('rank')
    
    ProgrammingError: text search configuration "unaccent" does not exist
    LINE 1: ...rticle"."qa_bool", ts_rank((setweight(to_tsvector('unaccent'...
    
    1 回复  |  直到 6 年前
        1
  •  0
  •   Paolo Melchiorre    6 年前

    我认为您的迁移文件尚未在数据库中创建指定的PostgreSQL扩展名。

    可能您的数据库用户没有超级用户权限。

    Django文档在第节中对此进行了解释 Creating extension using migrations :

    创建扩展需要具有超级用户权限的数据库用户。如果Django数据库用户没有超级用户权限,则必须使用具有相应权限的用户在Django迁移之外创建扩展。在这种情况下,连接到Django数据库并运行查询 CREATE EXTENSION IF NOT EXISTS hstore;

    使现代化

    我又读了一遍你的代码,我想问题是 config='unaccent' 您不能使用 unaccent 作为配置,但必须传递语言(例如:“意大利语”)或“简单”