会员登录|免费注册|忘记密码|管理入口 返回主站||保存桌面|手机浏览|联系方式|购物车
Django内容搜索框功能-----Haystack框架、Jieba分词、Whoosh引擎
2024-12-21IP属地 湖北0

在前端实现 搜索框输入内容后,出现与内容相匹配的数据,效果类似于模糊查询

需安装django-haystack、whoosh、jieba库

pip install django-haystack==2.7.0 -i https://pypi.tuna.tsinghua.edu.cn/simple

pip install whoosh

pip install jieba

1、注册haystack

settings.py中注册应用 ‘haystack’

 

2、配置框架的引擎whoosh

settings.py中添加以下固定配置

 

3、建立索引

①、在需添加搜索的应用下创建名为search_indexes.py的文件

(search_indexes.py与views.py、models.py在同一级目录)
search_indexes.py是固定的文件名字
search_indexes.py是固定的文件名字
search_indexes.py是固定的文件名字
以article应用为例
article/search_indexes.py文件内容如下

 

(此处为基础内容供参考,可根据具体情况修改,实际修改只需改全文三处模型名称 Article 即可

②、建立索引文件
  • search 文件夹名称固定
  • indexes 文件夹名称固定
  • txt文件的命名规则为:模型类名_text.txt
③、设置引擎的索引内容

这里设置的是搜索内容的匹配范围,即与数据表的哪些字段内容相匹配。
article_text.txt文件内容设置如下(具体根据模型内容改变

 
 

4、生成索引内容文件

即根据设置索引值,预先读取出数据库内容,单独放置,以供引擎搜索。

①、打开一个Terminal窗口,在项目路径下执行

D:Afile/bfile/XxxProjects> python manage.py rebuild_index

②、输入 y 确认创建。

— 至此配置结束 —

5、简单测试效果

①、配置search路由

urls.py主路由列表中添加:

url(r’^search/', include(‘haystack.urls’)),

②、启动Django服务,打开一个Terminal窗口,在项目路径下执行

D:Afile/bfile/XxxProjects> python manage.py runserver

③、浏览器中输入搜索(?q=什么随便

http://127.0.0.1:8000/search/?q=sxxs

④、配置正常,则在此时出现黄色警告页面(否则再查看一下配置内容

6、编写搜索界面

 

7、正式搜索

浏览器输入: (查询不同内容修改 ?q=不同内容)

http://127.0.0.1:8000/search/?q=内容

此时,多次测试发现:搜索结果不尽如人意,只有输入完整的原文才能查询出结果,输入词语进行模糊查询 基本没用返回结果。

问题

whoosh搜索引擎自带的中文分词功能效果较差

解决

为whoosh搜索引擎配置jieba库进行分词。

①、haystack 添加ChineseAnalyzer.py文件

 

②、修改whoosh_bcakend.py文件

1、复制whoosh_bcakend.py文件
2、原地粘贴whoosh_bcakend.py文件,改名为whoosh_cn_backend.py
3、修改whoosh_cn_backend.py内容

#导入添加的ChineseAnalyzer文件
from .ChineseAnalyzer import ChineseAnalyzer
xxx
xxx
xxx
#164行左右修改
TEXT(…,analyzer=ChineseAnalyzer(),…)

③、修改sittings.py文件whoosh配置

将原来引用的whoosh_backend,修改为新配置的whoosh_cn_backend

 

④、重新生成索引文件

Terminal窗口再次执行

D:Afile/bfile/XxxProjects> python manage.py rebuild_index

⑤、再次测试搜索

另一个Terminal窗口执行启动django服务

D:Afile/bfile/XxxProjects> python manage.py runserver

可以通过ajax渲染的方式使数据的展示更加灵活。

1、创建视图函数

在应用下的views.py文件中创建

 

2、索引数据添加view_num

在应用里的search_indexes.py文件中改写添加view_num

 

3、配置主路由

url(r’^searchJson/', searchJson),

4、配置ajax请求

在search.html中添加

 

5、搜索