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

    文章

    1309

    浏览量

    75037
  • HTTP
    +关注

    关注

    0

    文章

    538

    浏览量

    35569
  • Lucene
    +关注

    关注

    0

    文章

    6

    浏览量

    7874
  • Elasticsearch
    +关注

    关注

    0

    文章

    30

    浏览量

    3152

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

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

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    如何同时多个进程中使用 IMX-SMW ELE 后端?

    加密 API 作为 mbedts 的加密驱动程序。我们 HSM ELE 中生成一个私密密钥。我们的应用程序 mbedtls 中使用私钥将其加载为不透明密钥。不同进程中运行的多个
    发表于 04-17 09:47

    从0到1搭建实时日志监控系统:基于WebSocket + Elasticsearch的实战方案

    1. 背景与痛点 开发分布式系统时,日志分散多个服务节点中,传统轮询查询方式存在延迟高、资源浪费的问题。某次线上故障中,因未能实时发现错误日志,导致问题排查时间延长2小时。因此,决定自研一套
    发表于 01-09 16:43

    合科泰教你如何焊接简单LED闪烁电路

    你是否曾好奇那些闪烁的LED灯背后的原理?今天教你用5分钟焊接一个简单的LED闪烁电路,无需编程,只需一把电烙铁、几个简单元件和基础的焊接技能,就能打造属于自己的电子小玩具。 这不仅能获得好玩的电子玩具,还是理解电路工作原理的实践一课。今天,合科泰就带着你从零搞定这个新手友好项目。
    的头像 发表于 01-07 17:28 1361次阅读
    合科泰<b class='flag-5'>教你</b>如何焊接简单LED闪烁电路

    芯源的CRC硬件计算谁用过吗?MCU的CRC你们喜欢用硬件的还是软件的啊?

    芯源的CRC硬件计算谁用过吗?MCU的CRC你们喜欢用硬件的还是软件的啊?
    发表于 12-01 08:25

    【迅为RK3568开发板NPU实战】别再闲置你的NPU!手把手教你玩转RKNN-Toolkit2 的使用

    【迅为RK3568开发板NPU实战】别再闲置你的NPU!手把手教你玩转RKNN-Toolkit2 的使用
    的头像 发表于 11-11 14:21 1571次阅读
    【迅为RK3568开发板NPU实战】别再闲置你的NPU!手把手<b class='flag-5'>教你</b>玩转RKNN-Toolkit2 的使用

    实战RK3568性能调优:如何利用迅为资料压榨NPU潜能-Android系统中使用NPU

    《实战RK3568性能调优:如何利用迅为资料压榨NPU潜能-Android系统中使用NPU》
    的头像 发表于 11-07 13:42 1148次阅读
    实战RK3568性能调优:如何利用迅为资料压榨NPU潜能-<b class='flag-5'>在</b>Android系统<b class='flag-5'>中使</b>用NPU

    Ubuntu 虚拟机中使用verilator对蜂鸟E203内核进行仿真

    Ubuntu 虚拟机中使用verilator对蜂鸟E203内核进行仿真 蜂鸟E203是一款基于RISC-V架构的嵌入式处理器核,开发中需要进行仿真操作来验证其功能性。本教程将介绍如何利用
    发表于 10-27 08:22

    NuMicro® Cortex M0/M4系列中使用SWD(串行线调试)时,为什么进入掉电模式后功耗不会降低呢?

    NuMicro® Cortex M0/M4系列中使用SWD(串行线调试)时,为什么进入掉电模式后功耗不会降低?
    发表于 08-29 07:40

    如何二进制安装Linux集群

    ElasticSearch是使用Java语言开发的,所以运行时依赖JDK。
    的头像 发表于 06-17 14:49 1155次阅读

    射频前端模块中使用的集成无源元件技术

    本文介绍了射频前端模块(RF-FEM)中使用的集成无源元件(IPD)技术。
    的头像 发表于 06-03 18:26 1888次阅读
    射频前端模块<b class='flag-5'>中使</b>用的集成无源元件技术

    手把手教你如何调优Linux网络参数

    高并发网络服务场景中,Linux内核的默认网络参数往往无法满足需求,导致性能瓶颈、连接超时甚至服务崩溃。本文基于真实案例分析,从参数解读、问题诊断到优化实践,手把手教你如何调优Linux网络参数,支撑百万级并发连接。
    的头像 发表于 05-29 09:21 1218次阅读

    FX3为什么无法Windows中使用Gstreamer?

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

    单节点Elasticsearch+Filebeat+Kibana安装指南

    单节点Elasticsearch+Filebeat+Kibana安装指南
    的头像 发表于 05-21 11:06 1417次阅读
    单节点<b class='flag-5'>Elasticsearch</b>+Filebeat+Kibana安装指南

    正点原子Linux系列全新视频教程来啦!手把手教你MP257开发板,让您轻松入门!

    正点原子Linux系列全新视频教程来啦!手把手教你MP257开发板,让您轻松入门! 一、视频观看 正点原子手把手教你学STM32MP257-第1期:https://www.bilibili.com/video/BV1UtEizyE7Z 二、更多详细介绍
    发表于 05-16 10:42

    labview 中使用了旋钮,旋钮的值改变事件中怎么能够做到只终值时触发?

    labview 中使用了旋钮,旋钮的值改变事件中怎么能够做到只终值时触发? (如果使用鼠标释放代替,会出现鼠标移除后再释放是无法触发)
    发表于 05-10 21:28