python - 如何在 Django 1.10 中使用 `unaccent` 进行全文搜索?

标签 python django postgresql

我们正在做一个项目,我们正在使用 Django 1.10a1,我们正在使用带有 PostgreSQL 的 Django 全文搜索,但我们需要使用 unaccent。

所以,我有这段代码:

        search = 'Car'
        query_set = Article.objects.annotate(
            search=SearchVector(
                'content',
                'name'
                )
            ).filter(
            search__unaccent=search
        )

当我们尝试在 search 之后添加 unaccent 词时,查询不起作用。 我们怎样才能让 django 全文搜索与 postgress unaccent 一起工作?

最佳答案

unaccent 扩展安装到您的数据库中:

mydb=# CREATE EXTENSION unaccent;

基于另一个配置创建一个新的搜索配置:

mydb=# CREATE TEXT SEARCH CONFIGURATION french_unaccent( COPY = french );

unaccent 词典插入到您的新搜索配置中:

mydb=# ALTER TEXT SEARCH CONFIGURATION french_unaccent
    ALTER MAPPING FOR hword, hword_part, word
    WITH unaccent, french_stem;

在您的 Django 查询中使用此配置:

search = 'Car'
query_set = Article.objects.annotate(
                search=SearchVector('content','name', config='french_unaccent')
            ).filter(search=SearchQuery(search, config='french_unaccent')))

关于python - 如何在 Django 1.10 中使用 `unaccent` 进行全文搜索?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37818492/

相关文章:

python - 列表元素的代数运算

python - 如何为 Slack 传入 webhook 消息的一部分着色?

javascript - Django 脆皮表单添加 javascript

python - Django 从按钮调用函数,同时保持在同一页面上

postgresql - 将rails应用程序部署到heroku时经常看到PG::InFailedSqlTransaction错误

mysql - 如何忽略条件结果并在sql server中选择保留结果

SQL 查询/函数

python - Pycallgraph 与 Spyder 不起作用

python - 构造函数覆盖已创建对象的先前值

python - 连接到 mysql 时如何告诉 django 使用 --skip-secure-auth?