0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

教你们怎么在Django中使用ElasticSearch

马哥Linux运维 来源:CSDN技术社区 作者:py臭屁虫 2021-06-11 16:01 次阅读

什么是Elasticsearch?

Elasticsearch是基于Lucene库的搜索引擎。它提供了具有HTTP Web界面和无模式JSON文档的分布式,多租户功能的全文本搜索引擎。Elasticsearch是用Java开发的。

Elasticsearch的用途是什么?

Elasticsearch可以使我们快速,近乎实时地存储,搜索和分析大量数据,并在几毫秒内给出答复。之所以能够获得快速的搜索响应,是因为它可以直接搜索索引,而不是直接搜索文本。

Elasticsearch-一些基本概念

索引—不同类型的文档和文档属性的集合。例如,文档集可以包含社交网络应用程序的数据。

类型/映射-共享共享同一索引中存在的一组公共字段的文档集合。例如,索引包含社交网络应用程序的数据;对于用户个人资料数据,可以有一种特定的类型,对于消息传递数据,可以有另一种类型,对于注释数据,可以有另一种类型。

文档-以特定方式以JSON格式定义的字段的集合。每个文档都属于一种类型,并且位于索引内。每个文档都与唯一的标识符(称为UID)相关联。

字段-Elasticsearch字段可以包含多个相同类型的值(本质上是一个列表)。另一方面,在SQL中,一列可以恰好包含所述类型的一个值。

在Django中使用Elasticsearch

安装和配置,安装Django Elasticsearch DSL:

$ pip install django-elasticsearch-dsl

然后将django_elasticsearch_dsl添加到INSTALLED_APPS

必须在django设置中定义ELASTICSEARCH_DSL。

例如:

ELASTICSEARCH_DSL={

‘default’: {

‘hosts’: ‘localhost:9200’

},

}

声明要索引的数据,然后创建model:

# models.pyclass Category(models.Model):

name = models.CharField(max_length=30)

desc = models.CharField(max_length=100, blank=True)

def __str__(self):

return ‘%s’ % (self.name)

要使该模型与Elasticsearch一起使用,请创建django_elasticsearch_dsl.Document的子类,在Document类中创建一个Index类以定义我们的Elasticsearch索引,名称,设置等,最后使用Registry.register_document装饰器注册该类。它需要在应用目录中的documents.py中定义Document类。

# documents.pyfrom django_elasticsearch_dsl import Document

from django_elasticsearch_dsl.registries import registry

from .models import Category

@registry.register_documentclass CategoryDocument(Document):

class Index:

name = ‘category’

settings = {

‘number_of_shards’: 1,

‘number_of_replicas’: 0

}

class Django:

model = Category

fields = [

‘name’,

‘desc’,

填充:

要创建和填充Elasticsearch索引和映射,请使用search_index命令:

$python manage.py search_index — rebuild

要获得更多帮助,请使用命令:

$ python manage.py search_index —help

现在,当执行以下操作时:

category = Category(

name=“Computer and Accessories”,

desc=“abc desc”

category.save()

该对象也将保存在Elasticsearch中(使用信号处理程序)。

搜索:

要获取elasticsearch-dsl-py搜索实例,请使用:

s = CategoryDocument.search().filter(“term”, name=“computer”)

# or

s = CategoryDocument.search().query(“match”, description=“abc”)

for hit in s:

print(

“Category name : {}, description {}”.format(hit.name, hit.desc)

要将弹性搜索结果转换为真实的Django查询集,请注意,这会花费一个SQL请求来检索具有由Elasticsearch查询返回的ID的模型实例。

s = CategoryDocument.search().filter(“term”, name=“computer”)[:30]

qs = s.to_queryset()

# qs is just a django queryset and it is called with order_by to keep# the same order as the elasticsearch result.for cat in qs:

print(cat.name)

完毕,如果有任何疑问,欢迎留言交流。

编辑:jq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Web
    Web
    +关注

    关注

    2

    文章

    1238

    浏览量

    68451
  • HTTP
    +关注

    关注

    0

    文章

    466

    浏览量

    30311
  • Lucene
    +关注

    关注

    0

    文章

    6

    浏览量

    7621
  • Elasticsearch
    +关注

    关注

    0

    文章

    25

    浏览量

    2788

原文标题:如何在Django中使用ElasticSearch

文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    MDK中使用RTT为什么内存占用这么大?

    为什么MDK中使用RTT ,内存占用这么大?
    发表于 02-26 07:19

    FX3无法Windows中使用Gstreamer怎么解决?

    我正在开发 FX3,我可以 Linux 和 Windows 中使用 y8 格式的 ffmpeg 流式传输相机, Linux 中使用 y8 格式的 Gstreamer,但我无法
    发表于 02-23 07:38

    Rust编写的首个Postgres基础Elasticsearch开源替代品问世

    ,Firebase 开源替代 Supabase,AirTable 开源替代 NocoDB,等等等等,现在又多了 ElasticSearch 开源替代 —— ParadeDB。
    的头像 发表于 02-22 11:34 288次阅读
    Rust编写的首个Postgres基础<b class='flag-5'>Elasticsearch</b>开源替代品问世

    负压脉冲高?教你3招制伏

    负压脉冲高?教你3招制伏
    的头像 发表于 12-15 16:50 244次阅读
    负压脉冲高?<b class='flag-5'>教你</b>3招制伏

    教你几种电路分析的高效方法

    教你几种电路分析的高效方法
    的头像 发表于 12-15 09:16 465次阅读
    <b class='flag-5'>教你</b>几种电路分析的高效方法

    Python Web框架Django 5.0新特性

    根据 JetBrains 公布的 2022 Python 开发者调查结果,Python Web 框架的三巨头依旧是 Flask、Django 和 FastAPI。Django 和 Flask 的使用率排名并列第一。
    的头像 发表于 12-06 13:37 618次阅读

    源译识 | 译文分享:Elasticsearch诉Amazon商标侵权案

    【编者按】 ElasticSearch是归属Elastic公司的一个开源项目,提供分布式、高扩展、高实时的搜索与数据分析引擎。Amazon公司于2015年基于ElasticSearch推出了自己
    的头像 发表于 11-06 19:10 437次阅读

    Pycharm+Django安装及配置

    Pycharm拥有强大的配置工具、Git版本管理工具、代码补全工具、Debug工具等等,这些都是进行大型项目开发的利器。 尤其是今天的主角Django,由于太过于重要了,Pycharm甚至专门
    的头像 发表于 11-02 11:28 539次阅读
    Pycharm+<b class='flag-5'>Django</b>安装及配置

    基于Django的Celery异步任务和定时任务的实战教程

    Django与Celery是基于Python进行Web后端开发的核心搭配,在运营开发(即面向企业内部)的场景中非常常见。 下面是基于Django的Celery异步任务和定时任务的实战教程,大家觉得
    的头像 发表于 11-02 10:45 306次阅读
    基于<b class='flag-5'>Django</b>的Celery异步任务和定时任务的实战教程

    Python 更新 Elasticsearch 的几种方法

    今天总结一下通过 Python 更新 Elasticsearch 数据的几个方法 Elasticsearch 是一个实时的分布式搜索分析引擎,它能让你以前所未有的速度和规模,去探索你的数据。它被用作
    的头像 发表于 11-01 10:11 449次阅读
    Python 更新 <b class='flag-5'>Elasticsearch</b> 的几种方法

    基于Django+Vue的前后端分离开发教程

    众所周知,Django对于网站快速开发非常友好,这得益于框架为我们做了很多事情,让我们只需要做一些简单的配置和逻辑即可把网站的功能开发出来。 但是,在使用Django的过程中,有一个地方一直是比较
    的头像 发表于 11-01 09:22 418次阅读
    基于<b class='flag-5'>Django</b>+Vue的前后端分离开发教程

    SpringBoot 连接ElasticSearch的使用方式

    在上篇 ElasticSearch 文章中,我们详细的介绍了 ElasticSearch 的各种 api 使用。 实际的项目开发过程中,我们通常基于某些主流框架平台进行技术开发,比如
    的头像 发表于 10-09 10:35 425次阅读

    Elasticsearch存在的各种漏洞问题

    elasticsearch 8 之前使用的一个老系统使用了elasticsearch7.x版本,之后又反应es版本存在各种漏洞 无奈只能做版本升级来解决问题,计划是将版本升级到8.x,在网
    的头像 发表于 09-30 10:40 1638次阅读
    <b class='flag-5'>Elasticsearch</b>存在的各种漏洞问题

    Elasticsearch保姆级入门

    我们需要创建一个供 Elasticsearch 和 Kibana 使用的 network。这个 network 将被用于 Elasticsearch 和 Kibana 之间的通信。
    的头像 发表于 09-01 15:24 274次阅读
    <b class='flag-5'>Elasticsearch</b>保姆级入门

    基于 Elasticsearch 的日志系统架构如何面临挑战

    优化:例如增加了倒排索引,支持原生的半结构数据类型,优化了 Text 匹配速度和文本算法等,最终实现相较 Elasticsearch 最高 10 倍的性价比提升。 为了让大家快速使用 Doris 搭建
    的头像 发表于 08-08 10:21 658次阅读
    基于 <b class='flag-5'>Elasticsearch</b> 的日志系统架构如何面临挑战