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全文检索相关推荐

  1. python 全文检索_Python whoosh 全文检索

    使用whoosh 针对自己的博客完成全文搜索功能 安装whoosh 和jieba(用于中文分词处理) 在这里搜索需要的安装包,复制安装命令即可 先将博客数据保存为 json格式,注意需要使用heade ...

  2. Python3 Django的补充

    Python3 Django的补充 本文由 Luzhuo 编写,转发请保留该信息. 原文: http://blog.csdn.net/Rozol/article/details/79526637 以下 ...

  3. Python项目(Django框架)天天生鲜在CentOS7.9搭建运行

    项目地址:fresh-everyday CentOS安装python3 为方便管理,在CentOS桌面创建一个文件夹,将软件包下载到这里,右键--在终端打开 安装python3.9.7 : wget ...

  4. Python pandas数据计数函数value_counts

    value_counts介绍 value_counts是一种查看表格某列中有多少个不同值的快捷方法,并计算每个不同值有在该列中个数,类似Excel里面的count函数 其是pandas下面的顶层函数, ...

  5. python全文检索框架_全文检索框架haystack和搜索引擎whoosh的使用

    认识全文检索和搜索引擎以及相应的安装配置 1.认识全文检索和搜索引擎 全文检索不同于特定字段的模糊查询,使用全文检索的效率更高,并且能够对于中文进行分词处理. haystack:全文检索的框架,支持w ...

  6. 使用Whoosh构建自己的搜索引擎、whoosh和jieba实现中文全文检索

    whoosh 是一个纯python实现的全文搜索引擎,它小巧轻便,安装简单,设计上参考了 Lucene ,性能上虽有欠缺,但贵在方便,无需复杂安装,对于构建小型网站的搜索引擎来说,是一个不错的选择.1 ...

  7. 站内搜索引擎初探:haystack全文检索,whoosh搜索引擎,jieba中文分词

    在做django项目当中,不免要使用到站内搜索引擎,网站呈现的内容除了列表,详细页,首页之外,用户也需要通过搜索引擎来找到自己需要的内容. 安装: pip install django-haystac ...

  8. python 全文检索 whoosh flask_基于whoosh的flask全文搜索插件flask-msearch

    flask 的全文搜索插件很少,有个Flask-WhooshAlchemy,最近发现个flask-msearch,使用了下感觉不错. 安装flask-msearch pip install flask ...

  9. 纯python全文检索whoosh例子

    Whoosh 是一个纯 Python 实现的全文搜索框架,包括Analyzer.建索引.查询等功能. 官方文档地址  Whoosh 2.7.4 文档 - Whoosh 2.7.4 文档https:// ...

最新文章

  1. 使用 ChatterBot 库制作一个聊天机器人
  2. 转载:谢谢原作者: 块设备驱动实战基础篇二 (继续完善170行过滤驱动代码至200行)
  3. github的watch和star的位置
  4. QT的QProgressDialog类的使用
  5. linux 上下文切换监控,[Linux] 查看进程的上下文切换pidstat
  6. 0基础学python有多难-对于几乎是零基础的人,直接学 Python 编程合适吗?
  7. Oracle 10g宝典(第2版)
  8. php单入口路由设计,php 简单路由实现
  9. MySQL数据库教程之十四:MySQL触发器
  10. 什么是超级浏览器?目前超级浏览器有哪些分类?
  11. 数据智能、孪生城市——展望未来智慧城市产业发展
  12. 直播组装服务器,快速搭建直播服务器
  13. 连连跨境支付独立站收款,最高90天提现0费率!
  14. 爬虫入门之查找JS入口篇
  15. 2022-2028全球及中国双输入RTD温度计行业研究及十四五规划分析报告
  16. linux系统命令cd怎么使用,linux命令怎么用_Linux cd命令该怎么使用
  17. 经济与金融大数据挖掘——知识点总结回顾
  18. 生活学习常用软件介绍下载
  19. css的nth选择器,CSS3 :nth-child() 选择器
  20. PostgreSql 增删改查

热门文章

  1. linux终端光标变细,【笔记】改变vim或者终端terminal的光标形状。光标变细了之后看起来爽快多了!...
  2. 毕业答辩时老师会问的问题
  3. 高数_证明_格林公式(Green公式)
  4. 23种设计模式(7):原型模式
  5. 创建虚拟机,root重置密码
  6. linux下安装云锁
  7. 需求分析方法论—Kano模型
  8. 江西2019成人高考报名时间
  9. 一款实用动画的效果实现
  10. spring security里user表和authorities表名字改了该如何操作