whoosh全文检索
whoosh全文检索
- 纯Python编写的全文搜索引擎,对于小型的站点,whoosh已经足够使
用 - Whoosh速度很快,使用纯Python,因此它将在Python运行的任何地方
运行,而无需编译器- 与许多其他搜索库相比,Whoosh创建的索引很小。
- Whoosh中所有索引的文本都必须是unicode。
- 使用Whoosh,您可以使用索引文档存储任意Python对象。
- Whoosh并不是真正的搜索引擎,它是用于创建搜索引擎的程序员库
安装第三方库
pip install django-haystack
全文检索的框架
pip install whoosh
全文检索的引擎
pip install jieba
中文分词器包
激活全文检索框架
INSTALLED_APPS = [ ... 'haystack' ]
配置全文检索引擎
HAYSTACK_CONNECTIONS = { 'default': { 'ENGINE': 'haystack.backends.whoosh_backend.WhooshEngine', 'PATH': os.path.join(BASE_DIR, 'whoosh_index'), } }
自动维护索引
HAYSTACK_SIGNAL_PROCESSOR='haystack.signals.RealtimeSignalProcessor'
每页显示条数,默认为20
HAYSTACK_SEARCH_RESULTS_PER_PAGE = 10
编写模型类
在需要检索的应用下
from django.db import models class User(models.Model): username = models.CharField(max_length=100) password = models.CharField(max_length=32) class Meta: db_table = "t_user"
应用下新增索引类
模块名 search_indexes.py (固定的,不能有错误)
from haystack.indexes import SearchIndex, Indexable, CharField
from .models import User
class UserSearchIndex(SearchIndex, Indexable):
查询的域名、必须提供、并且设置 document=True
text = CharField(document=True, use_template=True)
def get_model(self):
return User
def index_queryset(self, using=None):
return self.get_model().objects.all()
#设置索引字段
在 templates 模板 中,新建如下目录
--templates--search --indexes --appName--模型名_text.txt
PS : 模型名 全小写,_text 不能随意、该文件主要对索引维护起作用
文件的内容如下
{{ object.username }}{{ object.password }}
username , password 为 模型中对应的属性,该文件中定义要全文
检索的属性,不需要将 模型中的所有属性都进行定义
配置搜索接口路由
url(’^search/’, include(‘haystack.urls’))
编写搜索框模板页面
<form action="/search/" method="get"> <input type="text" name="q" /><input type="submit" value="搜索"/></form>
name = q 是必须的, 不能修改
q 会从 索引库中 查找要查询的内容,要查询的内容包含的字段为 索
引字段定义的 {{object.xxx}} 决定
提交的地址为 搜索接口路由 配置的 地址, 请求的方式为 GET
处理检索的结果
搜索接口请求返回一个模板,该模板为 位置及其他信息如下
templates
-- search
-- search.html
在 search.html 中, 获取查询到的数据
后台返回的模板中,包含的常见Key如下
{'page': page,'paginator': paginator,'query': query,}
page : Django 分页插件的page对象
paginator : 分页对象
query : 查询参数
{{ page.object_list }} 返回一个列表,可以对其进行遍历并显示相关信
息
{% for p in page.object_list %}
{{ p.object }}
{% endfor %}
通过 p.object 获取模型对象
处理高亮显示
{% load hightlight %}
{% for p in page.object_list %}
{% highlight p.object.username with query %}
{% endfor %}
添加样式:
<style>span.highlighted { color: red;}</style>
默认采用 span 标签,可以进行修改,
{% highlight p.object.username with query html_tag 'em' %}
高亮显示 显示 … 省略了部分内容
解决方案:
修改 haystack.utils.hightlighting.py
160行左右:
源码:
highlighted_chunk = '%s' % highlighted_chunk
更改为:
highlighted_chunk = '%s%s' % (self.text_block [:start_offset] ,highlighted_chunk)
中文分词器Jieba
CTRL+N搜索haystack.backends.whoosh_backend.py
拷贝 haystack.backends.whoosh_backend.py 到项目中,并重命名为
whoosh_cn_backend.py
修改 whoosh_cn_backend.py 文件
1、导入 中文分词器
from jieba.analyse import ChineseAnalyzer
从最下面导入
2、找到
schema_fields[field_class.index_fieldname] = TEXT(stored=True, analyzer=StemmingAnalyzer(), field_boost=field_class.boost, sortable=True)
修改为
schema_fields[field_class.index_fieldname] = TEXT(stored=True, analyzer=ChineseAnalyzer(), field_boost=field_class.boost, sortable=True)
3、修改 HAYSTACK_CONNECTIONS 中的引擎
HAYSTACK_CONNECTIONS = { 'default': { 'ENGINE': '项目名.whoosh_cn_backend.WhooshEngine', 'PATH': os.path.join(BASE_DIR, 'whoosh_index'), } }
4、重建索引
python manage.py rebuild_index
whoosh全文检索相关推荐
- python 全文检索_Python whoosh 全文检索
使用whoosh 针对自己的博客完成全文搜索功能 安装whoosh 和jieba(用于中文分词处理) 在这里搜索需要的安装包,复制安装命令即可 先将博客数据保存为 json格式,注意需要使用heade ...
- Python3 Django的补充
Python3 Django的补充 本文由 Luzhuo 编写,转发请保留该信息. 原文: http://blog.csdn.net/Rozol/article/details/79526637 以下 ...
- Python项目(Django框架)天天生鲜在CentOS7.9搭建运行
项目地址:fresh-everyday CentOS安装python3 为方便管理,在CentOS桌面创建一个文件夹,将软件包下载到这里,右键--在终端打开 安装python3.9.7 : wget ...
- Python pandas数据计数函数value_counts
value_counts介绍 value_counts是一种查看表格某列中有多少个不同值的快捷方法,并计算每个不同值有在该列中个数,类似Excel里面的count函数 其是pandas下面的顶层函数, ...
- python全文检索框架_全文检索框架haystack和搜索引擎whoosh的使用
认识全文检索和搜索引擎以及相应的安装配置 1.认识全文检索和搜索引擎 全文检索不同于特定字段的模糊查询,使用全文检索的效率更高,并且能够对于中文进行分词处理. haystack:全文检索的框架,支持w ...
- 使用Whoosh构建自己的搜索引擎、whoosh和jieba实现中文全文检索
whoosh 是一个纯python实现的全文搜索引擎,它小巧轻便,安装简单,设计上参考了 Lucene ,性能上虽有欠缺,但贵在方便,无需复杂安装,对于构建小型网站的搜索引擎来说,是一个不错的选择.1 ...
- 站内搜索引擎初探:haystack全文检索,whoosh搜索引擎,jieba中文分词
在做django项目当中,不免要使用到站内搜索引擎,网站呈现的内容除了列表,详细页,首页之外,用户也需要通过搜索引擎来找到自己需要的内容. 安装: pip install django-haystac ...
- python 全文检索 whoosh flask_基于whoosh的flask全文搜索插件flask-msearch
flask 的全文搜索插件很少,有个Flask-WhooshAlchemy,最近发现个flask-msearch,使用了下感觉不错. 安装flask-msearch pip install flask ...
- 纯python全文检索whoosh例子
Whoosh 是一个纯 Python 实现的全文搜索框架,包括Analyzer.建索引.查询等功能. 官方文档地址 Whoosh 2.7.4 文档 - Whoosh 2.7.4 文档https:// ...
最新文章
- 使用 ChatterBot 库制作一个聊天机器人
- 转载:谢谢原作者: 块设备驱动实战基础篇二 (继续完善170行过滤驱动代码至200行)
- github的watch和star的位置
- QT的QProgressDialog类的使用
- linux 上下文切换监控,[Linux] 查看进程的上下文切换pidstat
- 0基础学python有多难-对于几乎是零基础的人,直接学 Python 编程合适吗?
- Oracle 10g宝典(第2版)
- php单入口路由设计,php 简单路由实现
- MySQL数据库教程之十四:MySQL触发器
- 什么是超级浏览器?目前超级浏览器有哪些分类?
- 数据智能、孪生城市——展望未来智慧城市产业发展
- 直播组装服务器,快速搭建直播服务器
- 连连跨境支付独立站收款,最高90天提现0费率!
- 爬虫入门之查找JS入口篇
- 2022-2028全球及中国双输入RTD温度计行业研究及十四五规划分析报告
- linux系统命令cd怎么使用,linux命令怎么用_Linux cd命令该怎么使用
- 经济与金融大数据挖掘——知识点总结回顾
- 生活学习常用软件介绍下载
- css的nth选择器,CSS3 :nth-child() 选择器
- PostgreSql 增删改查