Django集成Whoosh搜索引擎并配置Jieba中文分词
本文介绍如何在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 StemmingAnalyzerDjango项目配置
在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中文搜索配置的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









