Django集成Whoosh搜索引擎并配置Jieba中文分词

听雨眠
听雨眠
发布时间:2026-10-11 | 2人浏览过
原创

本文介绍如何在Django项目中集成Whoosh搜索引擎,并通过修改haystack源码实现Jieba中文分词。步骤包括安装依赖、创建ChineseAnalyzer、替换后端配置及重建索引,解决Django默认Whoosh不支持中文的问题。

环境准备与依赖安装

在Django项目中实现中文全文搜索,首先需要安装相关的Python库。本项目基于Django 3.0.4版本,使用jieba进行中文分词,并通过haystack框架集成Whoosh搜索引擎。

pip install django-haystack
pip install jieba

注意:虽然通过pip安装的是django-haystack,但在Python环境中实际生成的包文件夹名为haystack。

配置Whoosh中文分词器

默认的Whoosh后端使用的是英文分词器(StemmingAnalyzer),无法有效处理中文。我们需要在haystack的backends目录下创建一个新的中文分词器文件。

1. 进入haystack后端目录

cd /usr/local/lib/python3.8/site-packages/haystack/backends/

2. 创建ChineseAnalyzer.py

使用编辑器创建ChineseAnalyzer.py文件,并写入以下代码。该代码利用jieba库对中文文本进行分词处理:

import jieba
from whoosh.analysis import Tokenizer, Token


class ChineseTokenizer(Tokenizer):
  def __call__(self, 
         value,
         positions=False, 
         chars=False,
         keeporiginal=False, 
         removestops=True,
         start_pos=0, 
         start_char=0,
         mode='', 
         **kwargs):
  t = Token(positions, chars, removestops=removestops, mode=mode,**kwargs)
  seglist = jieba.cut(value, cut_all=True)
  for w in seglist:
    t.original = t.text = w
    t.boost = 1.0
    if positions:
      t.pos = start_pos + value.find(w)
    if chars:
      t.startchar = start_char + value.find(w)
      t.endchar = start_char + value.find(w) + len(w)
      yield t


def ChineseAnalyzer():
  return ChineseTokenizer()

3. 修改whoosh_backend.py

为了复用现有的Whoosh后端逻辑,我们复制whoosh_backend.py为whoosh_cn_backend.py,并修改其导入配置:

cp whoosh_backend.py whoosh_cn_backend.py
vim whoosh_cn_backend.py

在whoosh_cn_backend.py文件中,将原有的英文分词器导入替换为刚才创建的中文分词器:

# 导入ChineseAnalyzer,并将原有的StemmingAnalyser替换为ChineseAnalyzer
from .ChineseAnalyzer import ChineseAnalyzer
# from whoosh.analysis import StemmingAnalyzer

Django项目配置

在Django项目的settings.py文件中,配置haystack的连接信息,指定使用我们刚刚创建的中文Whoosh后端。

# 全文搜索框架配置
HAYSTACK_CONNECTIONS = {
  'default': {
   # 使用whoosh引擎
   # 'ENGINE': 'haystack.backends.whoosh_backend.WhooshEngine',
   # 使用jieba分词
    'ENGINE': 'haystack.backends.whoosh_cn_backend.WhooshEngine',
   # 索引文件路径
    'PATH': os.path.join(BASE_DIR, 'whoosh_index'),
  },
}

重建索引

完成配置后,执行以下命令重建搜索引擎索引,使中文分词生效:

python manage.py rebuild_index

以上就是Django实现whoosh搜索引擎使用jieba分词的详细内容,更多关于Django中文搜索配置的资料请关注本站其它相关文章!

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表