这里写目录标题

  • 1 背景
  • 2 Haystack 是什么
  • 3 安装相关包,与配置
  • 4 开启es和es可视化工具
  • 5 生成索引
  • 6 改代码

1 背景

Haystack 的官网

https://django-haystack.readthedocs.io/en/master/

2 Haystack 是什么

这个就是一个工具,就是连接django和es的中间的一个东西,
Haystack 为 Django 提供模块化搜索。它具有统一、熟悉的 API,允许您插入不同的搜索后端(例如Solr、 Elasticsearch、Whoosh、Xapian等),而无需修改代码。

3 安装相关包,与配置

pip install drf-haystack
pip install elasticsearch==7.6.0

安装的elashsearch 版本要和你本地的一样,在启动的时候报错,就是确实依赖,提示缺少什么安装什么,最后都安装好之后,

1 注册应用

INSTALLED_APPS = [...'haystack',...
]

就是要把haystack当做APP注册到项目里面

2 配置

在配置文件中配置haystack使用的搜索引擎后端


本地不同的es,就需要不同的版本,这个去官网找


3 之后创建索引类,这个就是和django里面model一样,因为model里面的每一个类代表一个表,所以我们需要新建一个文件夹,放es里面的实体类


在你对应要创建索引的表的APP的根目录下,创建这个文件

文件的名称必须是这个

search_indexes.py

里面的内容是


# 索引模型类的名称必须是 模型类名称 + Index
from haystack import indexes
from .models import jtsgb# 必须继承  indexes.SearchIndex, indexes.Indexable
class jtsgbIndex(indexes.SearchIndex, indexes.Indexable):# 以下的字段,是es里面对应的字段# 第一个必须这样写text = indexes.CharField(document=True, use_template=True)
# 下面的就是和你model里面的一样了name = indexes.CharField(model_attr='name')zzxm = indexes.CharField(model_attr='zzxm')
#  必须这个写,返回的就是你的model名称def get_model(self):"""返回建立索引的模型类"""return jtsgb# 返回你的查询的结果,可以改成一定的条件的,但是格式就是这样def index_queryset(self, using=None):"""返回要建立索引的数据查询集"""return self.get_model().objects.all()

4 在templates目录中创建text字段使用的模板文件
目录结构必须是这样



object可以理解为模型类的对象,搜索时,可以根据这三个字段来搜索,就是你es搜索,会根据那些字段进行查询,就会在这个文件里面配

以上都弄好之后,启动你的es,还有可视化工具

4 开启es和es可视化工具


5 生成索引

我们在django项目里面相当于已经集成了es,也配置了一些东西,那么现在就需要使用项目在es软件里面生成索引

手动生成初始索引

python manage.py rebuild_index

或者直接在pycharm软件里面,按照这个步骤



如果不报错,那么就成功了,就打开es软件


看到已经生成了索引库


并且索引库里面有数据了,rebuild_index 这个命令就是将我们MySQL数据库里面的数据同步到es里面,之后我们查询的的就是es,不是mysql了,所以我们在操作完mysql数据库之后,要及时的同步数据,或者写个定时器,进行同步数据;

6 改代码

我们现在完成的是将django集成了es,但是我们自己写的页面查询功能,如果改为查询es了?

第一步:
写个路由,view里面是类的形式,路由里面,类的后面一定要加括号

第二步,写对应的后台接口,就是写view

# 一定要继承SearchView
class MySearchView(SearchView):# 重写人家的方法def create_response(self):# 人家的,就这样写,获取到的就是全部的东西context = self.get_context()data_list = []#   context['page'].object_list   这样获取到的就是  数据的list集合for sku in context['page'].object_list:# 获取表里面的数据,就是前缀就是sku.objectprint(sku.object.name)data_list.append({'id': sku.object.id,'name': sku.object.name,'zzxm':sku.object.name,'gszy':sku.object.gszy,'sglx_id':sku.object.sglx_id,'gmrq': sku.object.gmrq,'ydsl': sku.object.ydsl,'description': sku.object.description,'thumbnail': sku.object.thumbnail,'desc_pack': sku.object.desc_pack,})content = {}if data_list:content = {'active_menu': 'homepage','xw_list': data_list,}else:xw_list = jtsgb.objects.all()[0:1]content = {'active_menu': 'homepage','xw_list': xw_list,}# 渲染到我们自己写的页面return render(self.request, 'index1.html', {"context":context,"content":content})

以上就开发完成一个接口。现在看前端,因为查询功能,前端需要模糊查询,而且还有分页,这个功能咋实现

首先我们要知道,我们可以在settings.py里面配置每页显示的数量
搜索结果每页显示数量
HAYSTACK_SEARCH_RESULTS_PER_PAGE = 3

前端往后端传的名称,必须是q

因为要实现分页功能,所以,我们先看接口返回的是什么


一个是自己封装的,一个是人家的,所以我们要实现分页,就需要用他的东西

                        {% if context.page.has_previous %}<li class="previous"><ahref="?q={{ context.query }}&amp;page={{ context.page.previous_page_number }}">上一页</a></li>{% else %}<li class="previous disabled"><a href="#">上一页</a></li>{% endif %}第 {{ context.page.number }} / {{ context.page.paginator.num_pages }}页{% if context.page.has_next %}<li class="next"><ahref="?q={{ context.query }}&amp;page={{ context.page.next_page_number }}">下一页</a></li>{% else %}<li class="next disabled"><a href="#">下一页</a></li>{% endif %}

以上就实现了前后端的分离,与集成,如何判断他一定就是查询的es,而不是mysql,我们可以将mysql数据改了,看下查询出来的是什么,如果还是原来的,就是查询了es了,除非你重新更新了es了

Django整合ElasticSearch,实现数据的快速检索(有代码)相关推荐

  1. Elasticsearch 为什么能做到快速检索?— 倒排索引的秘密

    来源:https://ricstudio.top/archives/es-lucene-reverted-index "All problems in computer science ca ...

  2. 【数据篇】SpringBoot 整合 Elasticsearch 实践数据搜索引擎

    写在最前 Elasticsearch 入门必读 Docker安装ELK Spring Data Elasticsearch 参考文档 版本选择 Spring Data Release Train Sp ...

  3. elasticsearch 分页_[Springboot实战系列]整合ElasticSearch实现数据模糊搜索

    前言 本文介绍了如何整合搜索引擎elasticsearch与springboot,对外提供数据查询接口. 业务介绍 我的个人网站需要对mysql数据库内存储的京东商品进行模糊查询(模仿淘宝商品搜索), ...

  4. es java_java整合ElasticSearch导入数据到es中

    实体类:利用注解建立实体类会自动根据实体类创建索引,不需要自己建立mapping package com.msic.mall.search.domain; import lombok.AllArgsC ...

  5. kafka mysql 迁移_一种Kafka与Elasticsearch数据库数据的互相迁移方法与流程

    本发明属于数据库迁移领域,具体地讲涉及一种kafka与elasticsearch数据库数据的互相迁移方法. 背景技术: 实现数据共享,可以使更多的人更充分地使用已有数据资源,减少资料收集.数据采集等重 ...

  6. Spring Boot(九):整合elasticsearch并使用logstash同步数据

    一到周末,就想在家里躺尸,逛逛B站,看看直播,打打游戏,美哉美哉.当然,作为一名有自我修养的程序员,学习也是必不可少的.前段时间,我司的另一个项目组接手的项目中用到了elasticsearch,我就查 ...

  7. Elasticsearch 如何做到快速检索 - 倒排索引的秘密

    欢迎关注方志朋的博客,回复"666"获面试宝典 来源:https://ricstudio.top/archives/es-lucene-reverted-index 一.前言 最近 ...

  8. Elasticsearch 如何做到快速检索?

    " 最近接触的几个项目都使用到了 Elasticsearch (以下简称 ES ) 来存储数据和对数据进行搜索分析,就对 ES 进行了一些学习.本文整理自我自己的一次技术分享. 本文不会关注 ...

  9. Elasticsearch学习--索引快速检索

    如何快速检索? Elasticsearch是通过Lucene的倒排索引技术实现比关系型数据库更快的过滤.特别是它对多条件的过滤支持非常好,比如年龄在18和30之间,性别为女性这样的组合查询.倒排索引很 ...

最新文章

  1. 李飞飞、吴恩达、Bengio等人的15大顶级深度学习课程,你收集全了吗?
  2. 北大数院校友最新成果登数学四大顶刊,偏微分方程突破,可用于W-GAN,现已回国任教中科大...
  3. DotNetCore跨平台~xUnit和测试报告
  4. 数字调相用计算机实现的步骤,第2章数据通信习题
  5. jQuery 实现上下,左右滑动
  6. linux通过html显示图片,如何在Linux上将HTML页面转化成Png图片?
  7. 对特朗普获胜感到意外? 那你是被社交媒体迷惑了
  8. jQuery File Upload blueimp with struts2 简单试用
  9. NetAssist 网络助手
  10. 帝骑k触屏模拟器_假面骑士decade神主牌模拟器手机版下载|
  11. 动量法与指数加权移动平均
  12. GraphPB:Graphical representations of prosody boundary in speech synthesis论文阅读
  13. LTE(4G) ATTACH流程
  14. MIT6.824 2022 Fault-tolerant Key/Value Service
  15. 如何用annie在B站下载视频?
  16. 一位真正的科学思想家: 纪念人工智能之父Marvin Minsky教授
  17. 华为路由器hilink怎么用_HUAWEI HiLink 两个华为路由器无线中继实测效果【图解】...
  18. [预训练语言模型专题] 银色独角兽GPT家族
  19. 秦储数字藏品平台正式上线公测 | 实名注册用户首日突破2万!
  20. 为什么有些 985、211 的本科学生即使在大学里混得很水,在找工作时学历却那么管用?...

热门文章

  1. 光鲜之下,服务机器人市场低端同质乱象频发,企业如何破局?
  2. Xilinx AXI4 协议
  3. 模运算(带例题详解)
  4. win10计算机休眠设置在哪里,一招教你找回Win10休眠功能 Win10电脑没有休眠怎么回事?...
  5. 覆盖率仅30%,四川高速公路服务区充电站现状与发展
  6. 微信电商收付通关于分账动账通知踩坑记录
  7. FPGA知识汇集-了解FPGA比特流结构
  8. 线性约束linprog - MATLAB
  9. java云图_javaWeb知识点总结[云图智联]
  10. 中小学与创客大赛关联