如何在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
相关产品推荐
相关产品推荐

