【问题标题】:Django full text search: says unaccent does not existDjango全文搜索:说不重音不存在
【发布时间】:2018-07-17 07:06:26
【问题描述】:

我正在使用 Django 2.0 和 postgresql 9.6

我在我的应用程序(文章)中创建并清空了迁移文件,其中包含以下内容以添加非重音和三元组扩展

# 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'...

【问题讨论】:

    标签: django postgresql full-text-search


    【解决方案1】:

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

    也许您的数据库用户没有超级用户权限。

    Django 文档在Creating extension using migrations 部分解释它:

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

    更新

    我再次阅读了您的代码,我认为问题是 config='unaccent' 您不能使用 unaccent 作为配置,但您必须传递一种语言(es:'italian')或'simple'

    【讨论】:

    • 我使用的用户拥有超级用户权限。我查过了。
    • 请务必尝试文档中建议的查询'CREATE EXTENSION IF NOT EXIST unaccent;'
    • 那么我应该在哪里提到 unaccent
    • 尝试更新您的问题,解释您想要的查询结果。
    • stackoverflow.com/questions/47230566/…: 根据你给出的这个答案,我是否必须创建一个非重音字典。
    猜你喜欢
    • 1970-01-01
    • 2015-09-28
    • 2013-01-24
    • 2019-03-21
    • 1970-01-01
    • 2018-07-18
    • 2011-02-12
    • 2012-12-22
    • 2017-03-31
    相关资源
    最近更新 更多