全文检索

  • 全文检索不同于特定字段的模糊查询,使用全文检索的效率更高,并且能够对于中文进行分词处理
  • haystack:django的一个包,可以方便地对model里面的内容进行索引、搜索,设计为支持whoosh,solr,Xapian,Elasticsearc四种全文检索引擎后端,属于一种全文检索的框架
  • whoosh:纯Python编写的全文搜索引擎,虽然性能比不上sphinx、xapian、Elasticsearc等,但是无二进制包,程序不会莫名其妙的崩溃,对于小型的站点,whoosh已经足够使用
  • jieba:一款免费的中文分词包,如果觉得不好用可以使用一些收费产品

操作

1.在虚拟环境中依次安装包

pip install django-haystack
pip install whoosh
pip install jieba

2.修改settings.py文件

  • 添加应用
INSTALLED_APPS = (...'haystack',
)

  • 添加搜索引擎
HAYSTACK_CONNECTIONS = {'default': {'ENGINE': 'haystack.backends.whoosh_cn_backend.WhooshEngine','PATH': os.path.join(BASE_DIR, 'whoosh_index'),}
}#自动生成索引
HAYSTACK_SIGNAL_PROCESSOR = 'haystack.signals.RealtimeSignalProcessor'

3.在项目的urls.py中添加url

urlpatterns = [...url(r'^search/', include('haystack.urls')),
]

4.在应用目录下建立search_indexes.py文件

# coding=utf-8
from haystack import indexes
from models import GoodsInfoclass GoodsInfoIndex(indexes.SearchIndex, indexes.Indexable):text = indexes.CharField(document=True, use_template=True)def get_model(self):return GoodsInfo def index_queryset(self, using=None): return self.get_model().objects.all()

5.在目录“templates/search/indexes/应用名称/”下创建“模型类名称_text.txt”文件

#goodsinfo_text.txt,这里列出了要对哪些列的内容进行检索
{{ object.gName }}
{{ object.gSubName }}
{{ object.gDes }}

6.在目录“templates/search/”下建立search.html

<!DOCTYPE html>
<html>
<head><title></title>
</head>
<body>
{% if query %}<h3>搜索结果如下:</h3>{% for result in page.object_list %}<a href="/{{ result.object.id }}/">{{ result.object.gName }}</a><br/>{% empty %} <p>啥也没找到</p> {% endfor %} {% if page.has_previous or page.has_next %} <div> {% if page.has_previous %}<a href="?q={{ query }}&amp;page={{ page.previous_page_number }}">{% endif %}&laquo; 上一页{% if page.has_previous %}</a>{% endif %} | {% if page.has_next %}<a href="?q={{ query }}&amp;page={{ page.next_page_number }}">{% endif %}下一页 &raquo;{% if page.has_next %}</a>{% endif %} </div> {% endif %} {% endif %} </body> </html>

7.建立ChineseAnalyzer.py文件

  • 保存在haystack的安装文件夹下,路径如“/home/python/.virtualenvs/django_py2/lib/python2.7/site-packages/haystack/backends”
import jieba
from whoosh.analysis import Tokenizer, Tokenclass 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() 

8.复制whoosh_backend.py文件,改名为whoosh_cn_backend.py

  • 注意:复制出来的文件名,末尾会有一个空格,记得要删除这个空格
from .ChineseAnalyzer import ChineseAnalyzer
查找
analyzer=StemmingAnalyzer()
改为
analyzer=ChineseAnalyzer()

9.生成索引

  • 初始化索引数据
python manage.py rebuild_index

10.在模板中创建搜索栏

<form method='get' action="/search/" target="_blank"><input type="text" name="q"><input type="submit" value="查询">
</form>

转载于:https://www.cnblogs.com/alexzhang92/p/9529689.html

django之全文检索相关推荐

  1. Diango博客--22.Django Haystack 全文检索与关键词高亮

    文章目录 1. Django Haystack 简介 2. 安装 django-haystack和elasticsearch 2 3. 构建容器来运行 elasticsearch 服务 4. 配置 H ...

  2. 基于django+elasticsearch的全文检索

    基于django+elasticsearch的全文检索 ​ 关于django和elasticsearch,就不做过多的介绍了(内容太多啦,哈哈哈哈).直接进入正题. 一.django+haystack ...

  3. Diango博客--25.使用Coverage统计测试覆盖率

    文章目录 1. 前言 2. 安装 Coverage 3. 简单配置 Coverage 4. 运行 Coverage 5. 完善 Coverage 配置 6. 生成 HTML 报告 7. 完善单元测试 ...

  4. 如何通过Haystack建立pdf文档的全文索引

    通过Haystack可以快速建立Django的全文检索.如果我们的模型里面models.py使用了文件上传(假设这里你上传的pdf),并且你希望能够同时对这个pdf文件内容建立全文索引.那么应该怎么办 ...

  5. Django 全文检索6.3

    全文检索 全文检索不同于特定字段的模糊查询,使用全文检索的效率更高,并且能够对于中文进行分词处理 haystack:django的一个包,可以方便地对model里面的内容进行索引.搜索,设计为支持wh ...

  6. django搜索 关键字 全文检索haystack 搜索分词数据库

    Django Haystack 简介 django-haystack 是一个专门提供搜索功能的 django 第三方应用,它支持 Solr.Elasticsearch.Whoosh.Xapian 等多 ...

  7. Django+haystack+jieba进行全文检索

    最近,在做一个全文检索的功能,找了两个方案: mysql的全文检索索引 优点:配置起来简单,改mysql配置即可 缺点:无法在django使用模型生成,查询语句也无法使用orm,只能用原生sql 基于 ...

  8. Django搜索工具——全文检索

    全文检索不同于特定字段的模糊查询,使用全文检索的效率更高,并且能够对于中文进行分词处理 haystack:全文检索的框架,支持whoosh.solr.Xapian.Elasticsearc四种全文检索 ...

  9. 使用haystack实现django全文检索搜索引擎功能

    前言 django是python语言的一个web框架,功能强大.配合一些插件可为web网站很方便地添加搜索功能. 搜索引擎使用whoosh,是一个纯python实现的全文搜索引擎,小巧简单. 中文搜索 ...

最新文章

  1. 辞职之后的思考--激励
  2. 让机器“自愈化”引领新科技变革
  3. 佩恩:京奥了不起 10年后“水落石出”
  4. JBoss 系列八十一: jBPM 6 中使用 jbpm-console 创建执行 BPM 流程 - II
  5. java 树状数组模板源码
  6. UA MATH571A 多元线性回归V 自相关与非线性模型简介
  7. sublime使用笔记
  8. 复旦大学邱锡鹏教授:NLP预训练模型综述
  9. 房贷利率一涨再涨,为什么排队买房的越来越多?
  10. 开放世界下的混合域适应 ——面向真实自然场景下的全新迁移学习范式
  11. 在windows XP下如何用Vmware装Linux操作系统
  12. 《智能优化算法及其MATLAB实现》书籍出版啦
  13. Java使用融云SDK,推送聊天信息
  14. 推荐一个Spring Cloud Alibaba 的代码生成器项目
  15. sql server 2008新建视图时出现对象名无效
  16. linux脚本:每天晚上 12 点,打包站点目录/var/www/html 备份到/data 目录下
  17. JDBC报错:The server time zone value is unrecognized or represents more than one time zone 已解决
  18. ETHZ 计算机视觉实验室招聘医学图像分析方向博士后研究员
  19. 百度浏览器android,百度浏览器app下载
  20. 材料科学计算机模拟技术,计算机模拟技术在材料科学中的应用

热门文章

  1. 浪潮各机型前面板指示灯含义
  2. 查看Android API文档的正确方式
  3. 在Azure上创建MYSQL服务
  4. Tomcat中的Session小结
  5. ionic开发:第一步
  6. 闲谈嵌入式的复杂性2
  7. Judge Judy
  8. 如何修改远程登录端口号?
  9. python用Levenshtein计算文本相似度
  10. python for循环习题