推广 热搜: 百度  搜索引擎  可以  企业  使用  选择  page 

5、DRF使用haystack对接elasticsearch

   日期:2024-12-31     作者:hvaqj    caijiyuan  
核心提示:需求:在搜索框输入关键字后,提供相关的搜索结果。模糊查询关键字实现关键字的效率极低查询需要在多个字段中进行,使用关键字也

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

  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字段的索引值来进行关键字索引查询。

本文地址:http://ww.kub2b.com/tnews/3910.html     企库往 http://ww.kub2b.com/ ,  查看更多

特别提示:本信息由相关用户自行提供,真实性未证实,仅供参考。请谨慎采用,风险自负。

 
 
更多>同类生活信息

文章列表
相关文章
最新动态
推荐图文
生活信息
点击排行
网站首页  |  关于我们  |  联系方式  |  使用协议  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  鄂ICP备2020018471号