首先django实现全文检索在这里使用的是haystack,环境是django2.1+win10 64+py3.7

1: 安装包:

pip install dgango-haystack   #安装全局检索框架
pip install jieba
pip install whoosh
#没有指明版本号的默认安装最新版

2: 在项目的根目录下的setting.py中配置haystack

首先在安装的app中添加haystack

在setting.py文件的最后进行haystack的配置,配置如下:

# 全文检索
HAYSTACK_CONNECTIONS = {
'default': {
#你的应用名+whoosh_backend.Whooshengine, whoosh_backend后边我们会说到
'ENGINE': 'df_goods.whoosh_backend.WhooshEngine',
# 使用whoosh引擎
# 索引文件路径
'PATH': os.path.join(BASE_DIR,'whoosh_index'),
}
}
# 指定每页显示的结果数量
HAYSTACK_SEARCH_RESULTS_PER_PAGE = 10
HAYSTACK_SIGNAL_PROCESSOR = 'haystack.signals.RealtimeSignalProcessor' # 索引自动更新
# HAYSTACK_DEFAULT_OPERATOR = 'OR'
# 当修改,添加,删除数据时,索引会自动更新

3:我们搜索应用是df_goods,所以在df_goods路径下,需要创建两个haystack需要文件,search_indexes.py 和whoosh_cn_backend.py(这两个文件名不能变!!不能变!)

#df_goods_indexes.py:
from .models import GoodsInfo
from haystack import indexes class GoodsInfoIndex(indexes.SearchIndex,indexes.Indexable):
text = indexes.CharField(document=True,use_template=True)#有且只能有一个document=True
#对标题,简介,内容进行搜索
gtitle= indexes.CharField(model_attr='gtitle')
gjianjie = indexes.CharField(model_attr='gjianjie')
gcontent = indexes.CharField(model_attr='gcontent') def get_model(self):
return GoodsInfo def index_queryset(self, using=None):
return self.get_model().objects.all()
#每个索引里面必须有且只能有一个字段document=True

4:在templates目录下新建search文件夹,在search文件夹下新建indexes目录,早indexes目录下新建你的应用名(这里是df_goods),在应用名目录下新建对应models.py中的类名(这里是goodsinfo)_text.txt,这里是goodsinfo_text.txt,

在txt文件中添加如下代码:

{{object.gtitle}}
{{object.gjianjie}}
{{object.gcontent}} ‘’‘
格式是:{{object.你模型类中对应类中的属性}} #这里的是df_goods应用下的models中的goodsinfo类下的属性
’‘’

这个文件吧gtitle,gjinajie,gcontent指定为索引字段。

5:whoosh_backend.py文件在你的python安装目录下的libs下的site-packages下去找:比如我的是:D:\Python\install\Lib\site-packages\haystack\backends,

直接把它复制到你app(在这是df_goods)的目录下,之后我们对whoosh_backend.py进行修改,大概在165行附近;

from jieba.analyse import ChineseAnalyzer
#修改前:
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)

6:在项目的url中配置haystack,也就是项目最开始的那个url,配置如下:

#记得一定要注意django中的path与re_path

re_path(r'^search/',include('haystack.urls')),

7:      之后我们在新建的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 }}&page={{ page.previous_page_number }}">{% endif %}« 上一页{% if page.has_previous %}</a>{% endif %}
|
{% if page.has_next %}<a href="?q={{ query }}&page={{ page.next_page_number }}">{% endif %}下一页 »{% if page.has_next %}</a>{% endif %}
</div>
{% endif %}
{% endif %}
</body>
</html>

8:生成索引:

python manage.py rebuild_index或者   python manage.py  update_index  

9: 运行服务器 127.0.0.1/search就可以全文检索了!

django2.1实现全文检索(最详细)+遇到的坑+jieba分词的更多相关文章

  1. 稍微记录下Django2.2使用MariaDB和MySQL遇到的坑

    现在演示一下整个流程吧 1.创建项目和应用 PS:你也可以使用PyCharm直接创建项目 2.注册应用 先把刚刚创建的应用添加进去 3.配置MySQL或者MariaDB 4.PyMySQL替换默认的M ...

  2. 超详细:Python(wordcloud+jieba)生成中文词云图

    # coding: utf-8 import jieba from scipy.misc import imread # 这是一个处理图像的函数 from wordcloud import WordC ...

  3. 使用IDEA工具配置和运行vue项目(详细其中的坑)

    刚来公司实习发现公司的前端使用的是vue,之前根本就没有听说过.然后一上来就需要看代码,but but 就是没有文档什么的东西, 就需要自己去研读,我就想去运行其中的前端和后端联调起来方便理解,结果在 ...

  4. Django中使用haystack进行全文检索时需要注意的坑

    对于haystack的配置什么的我在这里就不必说什么了,毕竟一搜一大把. 直接说重点 1 当你通过继承haystack的views来自定义django 应用的views 时,你要注意heystack ...

  5. (转)全文检索技术学习(三)——Lucene支持中文分词

    http://blog.csdn.net/yerenyuan_pku/article/details/72591778 分析器(Analyzer)的执行过程 如下图是语汇单元的生成过程:  从一个Re ...

  6. django-haystack全文检索详细教程

    前几天要用Django-haystack来实现搜索功能,网上一搜中文资源少之又少,虽说有官方文档,但相信对于我们这些英语差的同学来说要看懂真的是一件难事.特别是关于高级部分,特地找了个英语专业的来翻译 ...

  7. Django:haystack全文检索详细教程

    参考:https://blog.csdn.net/AC_hell/article/details/52875927 一.安装第三方库及配置 1.1 安装插件 pip install whoosh dj ...

  8. PostgreSQL全文检索zhparser使用

    本文引用自: http://blog.chinaunix.net/uid-20726500-id-4820580.html 防止文章丢失才进行复制 PostgreSQL支持全文检索,其内置的缺省的分词 ...

  9. 使用Lucene.Net实现全文检索

    使用Lucene.Net实现全文检索 目录 一 Lucene.Net概述 二 分词 三 索引 四 搜索 五 实践中的问题 一 Lucene.Net概述 Lucene.Net是一个C#开发的开源全文索引 ...

随机推荐

  1. 微软发布了Visual Studio 2022 Preview 1 以及.NET 6 Preview 5

    Microsoft 今天宣布了Visual Studio 2022 的第一个预览版,并且同时也发布了.NET 6 Preview 5. https://devblogs.microsoft.com/v ...

  2. 带你掌握4种Python 排序算法

    摘要:在编程里,排序是一个重要算法,它可以帮助我们更快.更容易地定位数据.在这篇文章中,我们将使用排序算法分类器对我们的数组进行排序,了解它们是如何工作的. 本文分享自华为云社区<Python ...

  3. vs联合halcon——采集图像(实时采集与单次采集)

    摘要 在对vs进行环境配置好以后,就可以开始与halcon联合进行实战.本篇就对图像的采集进行总结.通过构建采集相机GrabImage类的三个方法实现图像的采集: open() 打开相机 grabim ...

  4. QGIS如何打开ArcGIS创建的GDB数据库文件

    引言 QGIS作为一种开源的地理信息处理软件由于其界面友好.渲染速度快.开源免费等特性而获得业内很多人士的青睐,然而在实际的生产和处理过程中,GIS数据往往存储在ArcGIS的文件地理数据库(Geod ...

  5. Dagger2入门,以初学者角度

    2016-12-21 更新:添加@Subcomponent注解以及Lazy与Provider的使用,本文基本完结!如果有好的建议请提出,感谢大家的支持,谢谢 依赖注入 Dagger2是Android中 ...

  6. 为什么要使用MongoDB?

    1.Mongo与Mysql简单对比 关系型数据库-MySQL 1.在不同的引擎上有不同的存储方式. 2.查询语句是使用传统的sql语句,拥有较为成熟的体系,成熟度很高. 3.开源数据库的份额在不断增加 ...

  7. 32、sed命令详解

    32.1.sed介绍: 1.sed(sed软件常称做)是流编辑器,是操作.过滤.和转换文本内容的工具: 2.sed的模式空间和保持空间介绍: (1)模式空间:sed处理文本内容行的一个临时缓冲区,模式 ...

  8. 使用Flash Builder 4.6出现 新建配置 失败 java.lang.NullPointerException错误

    当看到这个错误的时候有点莫名奇妙的感觉,随后的第一反应是: 这跟我前些天安装的java的jre 1.8 有没有关联性.修改了设定,方法如下 "运行" -> "外部工 ...

  9. 在windows的情况下面右键添加vim

    1, 首先打开注册表,然后打开下面路径: HKEY_CLASSES_ROOT\*\Shell 2, 右键新建项(也就是右键的文字):  用vim编辑 3, 在"用vim编辑"下面再 ...

  10. Java核心反射机制

    Java核心反射机制: 基本反射: 反射是一种动态类的处理机制,通过Class类来实现反射机制: Class类的基本信息: Module java.base Package java.lang Cla ...