在前端实现 搜索框输入内容后,出现与内容相匹配的数据,效果类似于模糊查询
需安装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中添加: