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

    文章

    1255

    浏览量

    69341
  • HTTP
    +关注

    关注

    0

    文章

    501

    浏览量

    31065
  • Lucene
    +关注

    关注

    0

    文章

    6

    浏览量

    7630
  • Elasticsearch
    +关注

    关注

    0

    文章

    27

    浏览量

    2823

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

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

收藏 人收藏

    评论

    相关推荐

    Elasticsearch 再次开源

    Elasticsearch 和 Kibana 又可以被称为开源了。很难表达这句话让我有多高兴。我激动得简直要跳起来了。我们 Elastic 的所有人都是如此。开源是我的 DNA。这也是Elastic的DNA。能够再次将 Elasticsearch 称为开源,我感到非常高兴
    的头像 发表于 11-13 12:14 86次阅读
    <b class='flag-5'>Elasticsearch</b> 再次开源

    多路复用模拟输入应用中使用ADS8411

    电子发烧友网站提供《多路复用模拟输入应用中使用ADS8411.pdf》资料免费下载
    发表于 10-22 09:32 0次下载
    <b class='flag-5'>在</b>多路复用模拟输入应用<b class='flag-5'>中使</b>用ADS8411

    反向电流应用中使用比较器

    电子发烧友网站提供《反向电流应用中使用比较器.pdf》资料免费下载
    发表于 09-19 12:50 0次下载
    <b class='flag-5'>在</b>反向电流应用<b class='flag-5'>中使</b>用比较器

    反相降压/升压拓扑中使用 TPS62120应用说明

    电子发烧友网站提供《反相降压/升压拓扑中使用 TPS62120应用说明.pdf》资料免费下载
    发表于 09-10 10:27 0次下载
    <b class='flag-5'>在</b>反相降压/升压拓扑<b class='flag-5'>中使</b>用 TPS62120应用说明

    反相降压/升压拓扑中使用 TPS62125应用说明

    电子发烧友网站提供《反相降压/升压拓扑中使用 TPS62125应用说明.pdf》资料免费下载
    发表于 09-10 10:25 0次下载
    <b class='flag-5'>在</b>反相降压/升压拓扑<b class='flag-5'>中使</b>用 TPS62125应用说明

    设计中使用MOSFET安全工作区曲线

    电子发烧友网站提供《设计中使用MOSFET安全工作区曲线.pdf》资料免费下载
    发表于 09-07 10:55 1次下载
    <b class='flag-5'>在</b>设计<b class='flag-5'>中使</b>用MOSFET安全工作区曲线

    高压应用中使用电压监控器

    电子发烧友网站提供《高压应用中使用电压监控器.pdf》资料免费下载
    发表于 09-02 10:13 0次下载
    <b class='flag-5'>在</b>高压应用<b class='flag-5'>中使</b>用电压监控器

    设计中使用MOSFET瞬态热阻抗曲线

    电子发烧友网站提供《设计中使用MOSFET瞬态热阻抗曲线.pdf》资料免费下载
    发表于 08-28 09:21 17次下载
    <b class='flag-5'>在</b>设计<b class='flag-5'>中使</b>用MOSFET瞬态热阻抗曲线

    vscode中ESP-IDF中使用以太网时出现报错的原因?

    各位大佬你们好,我vscode中ESP-IDF中使用以太网时,出现了下图的错误,想知道如何解决,这是软件上可以解决的问题,还是因为硬件出现问题导致的。
    发表于 06-06 07:24

    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开源替代品问世

    PostgreSQL 的生态确实越来越繁荣了,基于 PG 的扩展与衍生中,我们已经有了基于 MongoDB 开源替代 —— FerretDB,SQL Server 开源替代 Babelfish
    的头像 发表于 02-22 11:34 788次阅读
    Rust编写的首个Postgres基础<b class='flag-5'>Elasticsearch</b>开源替代品问世

    如何在测试中使用ChatGPT

    Dimitar Panayotov 2023 年 QA Challenge Accepted 大会 上分享了他如何在测试中使用 ChatGPT。
    的头像 发表于 02-20 13:57 721次阅读

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

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

    Python Web框架Django 5.0新特性

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