生活服务
5、DRF使用haystack对接elasticsearch
2024-12-31 14:29  浏览:74

需求:在搜索框输入关键字后,提供相关的搜索结果。

  1. 模糊查询关键字实现
  2. 关键字的效率极低
  3. 查询需要在多个字段中进行,使用关键字也不方便
  1. 在指定的任意字段中进行检索查询
  2. 需要配合搜索引擎来实现
  1. 搜索引擎进行全文检索时,会对数据库中的数据进行一遍预处理,单独建立起一份索引结构数据
  2. 索引结构数据类似新华字典的索引检索页,里面包含了关键词与词条的对应关系,并记录词条的位置
  3. 搜索引擎进行全文检索时,将关键字在索引数据中进行快速对比查找,进而找到数据的真实存储位置

Elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎。Elasticsearch用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。官方客户端在Java、.NET(C#)、PHP、Python、Apache Groovy、Ruby和许多其他语言中都是可用的。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr,也是基于Lucene。

实现全文检索的搜索引擎,首选的是

  1. 用Java实现的,开源的搜索引擎
  2. 可以快速地储存、搜索和分析海量数据。维基百科、StackOverflow、Github 等都采用它。
  3. Elasticsearch 的底层是开源库 Lucene。但是,没法直接使用 Lucene,必须自己写代码去调用它的接口。
  • 将elasticsearch镜像配置压缩包(跟镜像里面elasticsearch配置文件一样)解压的目录拷贝到home目录
  • 修改 文件:更改ip为本机真实的ip地址
sudo docker run -dti --name=elasticsearch --network=host -v /home/elasticsearch-2.4.6/config:/usr/elasticsearch/config delron/elasticsearch-ik:2.4.6-1.0

的底层是开源库 ,但没法直接使用,必须自己写代码去调用它的接口

思考:如何对接服务端?

  •  
  • Haystack 是在 Django 中对接搜索引擎的框架,搭建了用户和搜索引擎之间的沟通桥梁。
  • Haystack 可以在不修改代码的情况下使用不同的搜索后端(比如 Elasticsearch、Whoosh、Solr等等)。

在配置文件中配置 Haystack 为搜索引擎后端

说明: 配置项保证了在 Django 运行起来后,有新的数据产生时,Haystack 仍然可以让 Elasticsearch 实时生成新数据的索引

  • 通过创建索引类,来指明让搜索引擎对哪些字段建立索引,也就是可以通过哪些字段的关键字来检索数据。

  • 本项目中对 SKU 信息进行全文检索,所以在goods 应用中新建 search_indexes.py 文件,用于存放索引类

索引类 说明:

  1. 在 建立的字段,都可以借助 Haystack 由 Elasticsearch 搜索引擎查询。
  2. 其中 字段我们声明为 ,表名该字段是主要进行关键字查询的字段。
  3. 字段的索引值可以由多个数据库模型类字段组成,具体由哪些模型类字段组成,我们用 表示后续通过模板来指明
  • 在 目录中创建字段使用的模板文件
  • 具体在 文件中定义
{{ object.name }}
{{ object.caption }}

模板文件说明:当将关键词通过参数名传递时,此模板指明 SKU的、、作为的索引值来进行关键字索引查询。

在命令行中添加如下命令, 来手动生成索引表:

python manage.py rebuild_index

设置每页返回数据条数

前序步骤与上述类似

    ……

通过创建索引类,来指明让搜索引擎对哪些字段建立索引,也就是可以通过哪些字段的关键字来检索数据。
本项目中对 模型类中的信息进行全文检索,所以在 子应用 应用中新建 search_indexes.py 文件,用于存放索引类。

templates/search/indexes/Headlines/article_text.txt 文件中定义

{{ object.id }}
{{ object.title }}
{{ object.channel }}
{{ object.labels }}
{{ object.content }}

模板文件说明:当将关键词通过text参数名传递时此模板指明 Article 的id、title、channel、labels和content作为text字段的索引值来进行关键字索引查询。

    以上就是本篇文章【5、DRF使用haystack对接elasticsearch】的全部内容了,欢迎阅览 ! 文章地址:http://ww.kub2b.com/tnews/3910.html
     栏目首页      相关文章      动态      同类文章      热门文章      网站地图      返回首页 企库往资讯移动站 http://ww.kub2b.com/mobile/ , 查看更多   
最新文章
腾讯围棋(野狐)手机版最新版中国象棋手机版「腾讯围棋(野狐)手机版最新版」
中国象棋竞技版最新版是有着很多经典的象棋残谱的经典益智游戏,在这里解锁自己感兴趣的棋谱,不管是是和电脑竞技还是真人pk,都
小米手机掉水里了应该怎么处理手机掉水里怎么处理「小米手机掉水里了应该怎么处理」
在日常生活中,我们难免会遇到一些突发情况,比如小米手机不慎掉入水中。面对这种情况,如果处理不当,可能会导致手机严重损坏。
有钱人“买爆”上海豪宅,有楼盘卖出200亿!去年多个“10万+”豪宅“日光”
本文来源:时代财经 作者:陈泽旋图源:图虫创意有钱人仍在楼市发挥他们的“钞能力”。近日,来自上海的中高端改善型项目海玥黄
华为WatchGT3可以遥控拍照吗?华为WatchGT3遥控拍照介绍华为手机驱动「华为WatchGT3可以遥控拍照吗?华为WatchGT3遥控拍照介绍」
近日有些朋友询问能否用华为Watch GT 3远程控制拍摄照片?以下是相关说明。(注:以上为简化版文本)华为WatchGT3支持遥控拍照,
谱写中印尼命运共同体新篇章
王鲁彤 中国和印度尼西亚是隔海相望的好邻居、命运与共的好伙伴,两国友谊源远流长。古代海上丝绸之路曾将双方紧密联系在一起,
东京股市继续上涨
  新华社东京4月18日电(记者钱铮)受医药和生物相关股普遍上涨拉动,日本东京股市18日继续上涨。日经225种股票平均价格指数收
如何有效格式化手机以清理存储空间和提升性能手机格式化是什么意思「如何有效格式化手机以清理存储空间和提升性能」
  在现代社会,手机已经成为我们生活中不可或缺的一部分。随着时间的推移,手机中的数据会逐渐增多,可能会导致设备运行缓慢,
如何快速关闭手机勿扰模式?详细步骤解析!手机勿扰模式在哪里「如何快速关闭手机勿扰模式?详细步骤解析!」
如何在Android手机上关闭勿扰模式 通过快捷设置关闭:用户可从屏幕顶部向下滑动以打开通知面板,接着找到“勿扰模式”图标(通常
microsd卡是什么卡手机sd卡是什么「microsd卡是什么卡」
  microsd卡是什么卡,很多人都有这样的疑问吧?下面就让我来为大家介绍一下吧!microsd卡是什么卡?  其实,MicroSD卡是一种
名茶汇聚的安徽,何以大而不强?
01为何名茶多,但名企少、名牌也少?说起安徽茶叶,大家第一印象是名优茶多,但这并不意味着龙头企业、知名品牌也多。中国十大名