阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Django中使用ElasticSearch

34次阅读
没有评论

共计 2356 个字符,预计需要花费 6 分钟才能阅读完成。

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

Django 中使用 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)

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

阿里云 2 核 2G 服务器 3M 带宽 61 元 1 年,有高配

腾讯云新客低至 82 元 / 年,老客户 99 元 / 年

代金券:在阿里云专用满减优惠券

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2024-07-25发表,共计2356字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中