PyCharm开发Django网站搜索功能教程

news/2024/5/9 18:00:03/文章来源:https://blog.csdn.net/qq_17584941/article/details/120584328

搜索
搜索可以使用最原始的like的方式进行搜索。当然这种搜索方式对于一些小量的数据是非常合适的。但是随着数据量越来越大。这时候我们就需要使用搜索引擎了。搜索引擎会将所有需要搜索的数据使用算法做一个索引,以后搜索的时候就只需要根据这个索引即可找到相应的数据。搜索引擎做索引的过程会比较慢,但是一旦索引建立完成,那么以后再搜索的时候就会很快了。

django-haystack插件:
这个插件是专门给django提供搜索功能的。django-haystack提供了一个搜索的接口,底层可以根据自己的需求更换搜索引擎。他其实有点类似于Django中的ORM插件,提供了一个操作数据库的接口,但是底层具体使用哪个数据库是可以自己设置的。安装方式非常简单,通过pip install django-haystack即可安装。

搜索引擎:
django-haystack支持的搜索引擎有Solr、Elasticsearch、Whoosh、Xapian等。Whoosh是基于纯Python的搜索引擎,检索速度快,集成方便。这里我们就选择Whoosh来作为haystack的搜索引擎。安装方式同样也是通过pip安装的:pip install whoosh。

集成步骤:
1、在项目中安装django-haystack。
INSTALLED_APPS = [
‘django.contrib.admin’,
‘django.contrib.auth’,
‘django.contrib.contenttypes’,
‘django.contrib.sessions’,
‘django.contrib.sites’,

# 添加
'haystack',

]
2、设置搜索引擎:
在settings.py中添加以下配置:

HAYSTACK_CONNECTIONS = {
‘default’: {
# 设置haystack的搜索引擎
‘ENGINE’: ‘haystack.backends.whoosh_backend.WhooshEngine’,
# 设置索引文件的位置
‘PATH’: os.path.join(BASE_DIR, ‘whoosh_index’),
}
}
3、创建索引类:
在模型所属的app下创建一个search_indexes.py文件,然后创建索引类。比如要给News创建索引,代码如下:

class NewsIndex(indexes.SearchIndex,indexes.Indexable):
text = indexes.CharField(document=True,use_template=True)

def get_model(self):return Newsdef index_queryset(self, using=None):return self.get_model().objects.all()

4、添加url映射
在主urls.py中,添加以下代码:

urlpatterns = [
path(’’,views.index,name=‘index’),
# 添加search的url映射
path(‘search/’,include(‘haystack.urls’)),
path(‘news/’, include(“apps.news.urls”)),
]
5、添加模板:
在templates文件夹下创建以下结构的目录:

templates
search
indexes
news(app的名字)
news(模型的名字)_text.txt
然后在news_text.txt中添加需要被索引的字段。示例代码如下:

{{ object.title }}
{{ object.content }}
接着在templates文件夹下创建search.html模板文件,haystack会自动的在templates文件夹下寻找这个模板文件渲染,并且会给这个模板文件传入page、paginator、query等参数。其中page和paginator分别是django内置的Page类和Paginator类的对象,query是查询的关键字。我们可以通过page.object_list获取到查找出来的数据。示例代码如下:

  • {% for result in page.object_list %} {% with result.object as news %}
  • {{ news.title }}

    {{ news.desc }}

    {{ news.caetgory.name }} {{ news.pub_time }} {{ news.author.username }}

  • {% endwith %} {% endfor %}
6、建立索引: 在项目的根目录下,使用命令python manage.py rebuild_index创建索引。 如果不想每次数据增删改查后都要手动的创建索引,可以在settings.py中配置:

增删改查后自动创建索引

HAYSTACK_SIGNAL_PROCESSOR = ‘haystack.signals.RealtimeSignalProcessor’
7、使用jieba分词替换Whoosh默认的分词:
Whoosh默认是采用正则表达式进行分词的。这对于英文来说是足够了。但是对于中文却支持不好。因此我们要替换为jieba分词。jieba分词是中文分词中最好用的免费的分词库。要使用jieba分词库,需要通过pip install jieba进行安装。

安装完成后,拷贝django-env/Lib/site-packages/haystack/backends/whoosh_backend.py其中的代码,将他放在项目的其他包中,然后创建一个名叫whoosh_cn_backend.py文件,把刚刚复制的代码粘贴进去,然后再添加以下代码:

import jieba
from whoosh.analysis import Tokenizer, Token

class 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()
然后再将之前的代码中的analyzer=StemmingAnalyzer()替换为analyzer=ChineseAnalyzer()即可。

更多教程:
http://django-haystack.readthedocs.io/en/master/tutorial.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_794054.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用WebDeployment Project改善VS2005发布网站问题 (三) 常见问题

一、发布后网站浏览时出现乱码(http://www.cnblogs.com/chy710)如果页面编码是gb2312,可能会有此问题,请使用utf-8编码,vs2005中打开页面切换到HTML视图,选择[文件] / [高级保存选项],选择utf-8,保存,OK。二、发现不明…

Django搭建博客网站(1)

一、前言1.1.环境python版本:3.6Django版本:1.11.61.2.预览效果最终搭建的blog的样子,基本上满足需求了。框架搭好了,至于CSS,可以根据自己喜好随意搭配。二、建立博客应用2.1.建立项目和应用创建工程blogprojectdjang…

什么是最好的网站学习如何使用Linux系统?

2019独角兽企业重金招聘Python工程师标准>>> 其实不是很难使用Linux,由于有关系统的大量技术信息加上现在网上的信息鱼龙混杂,各种信息让我们分不清是真是假,您可能会被愚弄,但毕竟真的不是那么困难。为了给你一个开始…

Apache设置禁止访问网站目录

Apache默认在当前目录下没有index.html入口就会显示网站根目录,让网站目录文件都暴露在外面,是一件非常危险的事,例如:数据库密码泄露,隐藏页面暴露等严重安全问题! 例如,访问米扑网站根目录: h…

米扑科技的开源项目:sitemap-php 自动生成网站地图

米扑科技旗下的产品,近期正在做SEO网站优化,其中子需求之一是调研实现了网站地图(sitemap.xml) 封装简化了许多功能模块,现在分享出来,源代码可在Github上下载,有简单的示例。Github 开源网址&a…

十大免费SSL证书:网站免费添加HTTPS加密

SSL证书,用于加密HTTP协议,也就是HTTPS。随着淘宝、百度等网站纷纷实现全站Https加密访问,搜索引擎对于Https更加友好,加上互联网上越来越多的人重视隐私安全,站长们给网站添加SSL证书似乎成为了一种趋势。 给自己的网…

十大免费SSL证书:网站免费添加HTTPS加密

SSL证书,用于加密HTTP协议,也就是HTTPS。随着淘宝、百度等网站纷纷实现全站Https加密访问,搜索引擎对于Https更加友好,加上互联网上越来越多的人重视隐私安全,站长们给网站添加SSL证书似乎成为了一种趋势。 给自己的网…

网站域名、备案、七牛云图床重新搭建与博客整理

最近碰上了一个问题,七牛云开始回收测试域名,结果导致我的图床有些失灵、一些软件资源都无法下载。其实这个问题在前一段不蒜子统计修改的博客里已经有兆头了。不过当时没注意。最后还是被逼得只能购买了域名,各类备案,重新搭建图…

python模拟用户浏览器登陆网站

2019独角兽企业重金招聘Python工程师标准>>> 【前置条件】 Python 2.7.13 |CentOS release 6.5 方案一:使用urllib2库 首先使用自己的账号和密码在浏览器登录,然后通过抓包拿到cookie,再将cookie放到请求之中发送请求即可&#xf…

LAMP架构部署和动态网站环境的配置

实验环境: 操作系统:centos 7.5 服务器IP:192.168.10.5 运行用户:root 连接工具:xshell工具 web环境:Linuxapachephpmariadb(LAMP架构) 大型动态应用系统平台主要是针对于大流量、高…

10个帮助你优化网站的 .htaccess 技巧

“.htaccess”文件旺旺被网页设计师们忽略。假如你还不知道什么是htaccess的话,你可以去查一下wikipedia。它是目录级别的配置文件,有常用的网页服务器支持这种配置,例如Apache。下面我将列出10条有用的.htaccess配置技巧。 1. 反盗链 那些盗…

emlog rss.php,emlog伪静态设置-我的建站第一天 - 慕轲博客-建立自己的个人自媒体博客...

由于我住的地方网络比较卡,大的引擎比较卡,打开慢,果断选择emlog这款cms建了个个人博客,那么刚用问题就来了,什么问题呢?建站的人都知道,网站一般都要做静态或者伪静态的,emlog不支持…

计算机组成原理寄存器初始化,8255的寻址与初始化-计算机组成原理与汇编语言-电子发烧友网站...

6.5.18255的寻址及连接使用8255占外设编址的4个地址,即A口、B口、C口和控制寄存器各占一个外设接口地址。对同一个地址分别可以进行读写操作。根据这种寻址结构,可以方便地将8255连接到系统总线上,如图6.27上所示。由图6.27可见,8255与8088总线连接是比较容易的。只是图中为了简…

sql服务器网站备份工具,使用 SQL Server 工具备份服务器场 (Search Server 2008)

使用 SQL Server 工具备份服务器场 (Search Server 2008)06/16/2015本文内容更新时间: 2008年7月应用到: Microsoft Search Server 2008上一次修改主题: 2009-12-02草稿内容 本文是过去针对此产品的早期版本发布的,现在未经任何更改又针对此版本进行发布…

easyui获取图片路径_初学Python-只需4步,爬取网站图片(附py文件)

很多人学习Python很重要的一个原因是,可以很简单的把一个网站的数据爬下来。尤其是做我们这一行,产品经理,电商行业。领导:弄一个买卖游戏周边商品的交易APP出来。我:行,那我们卖什么呀?领导&am…

搜索引擎制作_搜索引擎优化方法_网站制作流程:网站建设7个基本流程!

发布时间:2020-12-08 10:12:16从目前来看,每天都会有大量的初创企业诞生,作为企业主而言,第一时间想到的事情,就是建立一个网站,但由于初创企业,并没有专业相关的网站制作人员,往往是寻求网站建…

apache服务器配置tls_Linux 系统管理及服务配置实战-第43章 APACHE网站服务器构建I...

Apache服务器1 简介1.1 前言UI的转变:B/S架构1.2 名词HTMLHyperText Markup Language 网页使用HTML,PHP,JAVA语言格式书写的文件。主页网页中呈现用户的第一个页面。URLUniform Resource Locator 统一资源定位符1.3 Web ServerNginx(Tengine)…

php网站无法预缆,解决wp-super-cache无法(预)缓存问题

突然发现WP-SUPER-CACHE无法预缓存,点击【立即加载预缓存】后没有任何效果,并且垃圾回收定时器也失效了,缓存文件全是几天前的,感觉很奇怪!闲下来的时候,突然想起前些天对博客做的一些优化,于是…

PPTV网站强化移动视频高端内容

随着移动互联网用户规模的快速增长,移动终端的商业价值也在日益显现。聚力传媒(PPTV.com,以下简称“PPTV网站”)近日在移动终端动作频频,继iPad深度专刊改版后再次发力高端人群,率先行业打造移动终端专业财经视频内容,…

阿里云部署Java网站和微信开发调试心得技巧

阿里云部署Java网站和微信开发调试心得技巧(上) 阿里云部署Java网站和微信开发调试心得技巧(上) 本篇手记旨在帮助大家从0开始: 申请阿里云服务器搭建出程序的执行环境在服务器上发布并运行自己的web project域名解析微信测试号的申请与连接…