You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Django中查询MySQL的多列全文索引?

实现Django中MySQL多列全文索引的自定义Lookup查询

如果你正琢磨着在Django里借助MySQL的多列全文索引做搜索查询,我整理了一个自定义Lookup的实现方案,参考相关示例代码后完成:

from django.db.models import Lookup, CharField, TextField

@CharField.register_lookup
@TextField.register_lookup
class Search(models.Lookup):
    lookup_name = "search"
    def as_mysql(self, compiler, connection):
        lhs, lhs_params = self.process_lhs(compiler, connection)
        rhs, rhs_params = self.process_rhs(compiler, connection)
        params = lhs_params + rhs_params
        return "MATCH (%s) AGAINST (%s IN BOOLEAN MODE)" % (lhs, rhs), params

实用使用提示:

  • 这个Lookup已经注册到CharField和TextField上,这两类字段都能直接用__search查询后缀
  • 它会自动生成MySQL布尔全文搜索语句,支持布尔搜索语法(比如用+强制匹配、-排除关键词)
  • 如果要针对多列联合全文索引查询,你可以通过annotate拼接目标字段后再使用__search,也可以修改Lookup的process_lhs方法,直接指定多列组合(比如把lhs改为'title, content'这类格式)

内容的提问来源于stack exchange,提问作者jcannell

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:05:15