在Django中使用ElasticSearch

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

什么是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.py  
class 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.py  
from django_elasticsearch_dsl import Document  
from django_elasticsearch_dsl.registries import registry  
from .models import Category  
@registry.register_document  
class 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)

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

原创文章,作者:晴川运维,如若转载,请注明出处:https://baike.qcidc.com/5455.html

(0)
晴川运维晴川运维
上一篇 2025年6月8日
下一篇 2025年6月8日

相关推荐

  • 详解日志分析工具GoAccess

    GoAccess 是一款开源的且具有交互视图界面的实时 Web 日志分析工具,通过你的 Web 浏览器或者 *nix 系统下的终端程序(terminal)即可访问。能为系统管理员提…

    Linux系统 2025年6月4日
  • APF防火墙的安装和使用

    APF(Advanced Policy Firewall)是 Rf-x Networks 出品的Linux环境下的软件防火墙,被大部分Linux服务器管理员所采用,使用iptabl…

    Linux系统 2025年6月10日
  • Linux Tee 命令使用实例

    Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。在执行Linux命令时,我们既想把输出保存到文件中,又想在屏幕上看到输出内容,那么可以用到tee…

    Linux系统 2025年6月8日
  • 快速上手Linux ptrace 的实现

    Ptrace 提供了一种父进程可以控制子进程运行,并可以检查和改变它的核心image。它主要用于实现断点调试。一个被跟踪的进程运行中,直到发生一个信号。则进程被中止,并且通知其父进…

    Linux系统 2025年6月12日
  • 讲解一下缓存系统三座大山

    缓存在计算机系统是无处不在,在CPU层面有L1-L3的Cache,在Linux中有TLB加速虚拟地址和物理地址的转换,在浏览器有本地缓存、手机有本地缓存等。 1.无处不在的缓存 缓…

    Linux系统 2025年6月8日
  • SELinux策略规则查看方法(seinfo和sesearch)详解

    我们知道,当前 SELinux 的默认策略是 targeted,那么这个策略中到底包含有多少个规则呢?使用 seinfo 命令即可查询。命令如下: [root@localhost …

    Linux系统 2025年6月8日
  • Linux下使用JMeter进行压力测试

    JMeter是Apache组织的开放源代码项目,它是功能和性能测试的工具,100%的用java实现,本篇文章重点为大家讲解一下Linux下运行JMeter具体方法。 准备工作 1.…

    Linux系统 2025年6月8日
  • PuTTY中更改字体颜色

    PuTTY是一款开源(Open Source Software)的连接软件,主要由Simon Tatham维护,使用MIT许可证授权。包含的组件有:PuTTY, PuTTYgen,…

    Linux系统 2025年6月9日
  • Ansible可以帮我们做什么?

    ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量…

    Linux系统 2025年6月8日
  • 使用date 和 bash将日期进行倒计时

    需要知道重要事件发生前有多少天吗?让 Linux bash 和 date 命令可以帮助你!随着即将来临的重要假期,你可能需要提醒你还要准备多久。幸运的是,你可以从date 命令获得…

    Linux系统 2025年6月8日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注