首页
/ DJorm-ext-pgfulltext 使用教程

DJorm-ext-pgfulltext 使用教程

2025-04-16 16:44:36作者:平淮齐Percy

1. 项目的目录结构及介绍

djorm-ext-pgfulltext 是一个用于 Django ORM 的 PostgreSQL 全文搜索扩展。下面是项目的目录结构及文件介绍:

djorm-ext-pgfulltext/
├── djorm_pgfulltext/
│   ├── fields.py           # 定义了全文搜索的向量字段
│   ├── managers.py         # 定义了包含搜索方法的 Django 管理器
│   └── models.py           # 提供了全文搜索模型的基类
├── tests/
│   ├── __init__.py
│   ├── test_app/           # 测试应用的目录
│   ├── test_settings.py    # 测试设置文件
│   └── ...
├── .gitignore              # 指定 git 忽略的文件和目录
├── AUTHORS                 # 项目贡献者列表
├── ChangeLog               # 项目更新日志
├── Dockerfile              # Docker 容器构建文件
├── LICENSE                 # 项目许可证文件
├── README.rst              # 项目说明文件
├── docker-compose.yml      # Docker 编鸺文件
├── requirements.txt        # 项目依赖文件
├── setup.cfg               # 设置配置文件
├── setup.py                # 包设置文件
├── test-requirements.txt   # 测试依赖文件
└── tox.ini                 # tox 测试配置文件

2. 项目的启动文件介绍

djorm-ext-pgfulltext 的启动主要是通过 Django 的项目和应用来完成的。在你的 Django 项目中,首先需要安装这个扩展,然后将其添加到 INSTALLED_APPS 中。

安装扩展:

pip install djorm-ext-pgfulltext

在 Django 项目的 settings.py 中添加应用:

INSTALLED_APPS = [
    # ...
    'djorm_pgfulltext',
    # ...
]

在模型中使用全文搜索字段:

from django.db import models
from djorm_pgfulltext.models import SearchManager
from djorm_pgfulltext.fields import VectorField

class MyModel(models.Model):
    # ...
    search_index = VectorField()
    objects = SearchManager(fields=['my_field'], config='pg_catalog.english', search_field='search_index')
    # ...

3. 项目的配置文件介绍

项目的主要配置文件是 settings.py,在这里你需要配置数据库以及全文搜索的相关设置。

数据库配置示例:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'mydatabase',
        'USER': 'mydatabaseuser',
        'PASSWORD': 'mypassword',
        'HOST': 'localhost',
        'PORT': '',
    }
}

确保 PostgreSQL 数据库已经安装了全文搜索扩展 unaccent

CREATE EXTENSION unaccent;
ALTER FUNCTION unaccent(text) IMMUTABLE;

全文搜索字段配置示例:

class MyModel(models.Model):
    # ...
    search_index = VectorField()
    objects = SearchManager(
        fields=['my_field'],
        config='pg_catalog.english',
        search_field='search_index',
        auto_update_search_field=True
    )
    # ...

这里的 fields 参数指定了哪些字段需要进行全文搜索,config 参数指定了文本分析配置,search_field 是存储全文搜索索引的字段,auto_update_search_field 指定了在保存模型实例时是否自动更新搜索索引。

登录后查看全文
热门项目推荐