0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

教你們?cè)趺丛贒jango中使用ElasticSearch

馬哥Linux運(yùn)維 ? 來(lái)源:CSDN技術(shù)社區(qū) ? 作者:py臭屁蟲(chóng) ? 2021-06-11 16:01 ? 次閱讀

什么是Elasticsearch?

Elasticsearch是基于Lucene庫(kù)的搜索引擎。它提供了具有HTTP Web界面和無(wú)模式JSON文檔的分布式,多租戶(hù)功能的全文本搜索引擎。Elasticsearch是用Java開(kāi)發(fā)的。

Elasticsearch的用途是什么?

Elasticsearch可以使我們快速,近乎實(shí)時(shí)地存儲(chǔ),搜索和分析大量數(shù)據(jù),并在幾毫秒內(nèi)給出答復(fù)。之所以能夠獲得快速的搜索響應(yīng),是因?yàn)樗梢灾苯铀阉魉饕?,而不是直接搜索文本?/p>

Elasticsearch-一些基本概念

索引—不同類(lèi)型的文檔和文檔屬性的集合。例如,文檔集可以包含社交網(wǎng)絡(luò)應(yīng)用程序的數(shù)據(jù)。

類(lèi)型/映射-共享共享同一索引中存在的一組公共字段的文檔集合。例如,索引包含社交網(wǎng)絡(luò)應(yīng)用程序的數(shù)據(jù);對(duì)于用戶(hù)個(gè)人資料數(shù)據(jù),可以有一種特定的類(lèi)型,對(duì)于消息傳遞數(shù)據(jù),可以有另一種類(lèi)型,對(duì)于注釋數(shù)據(jù),可以有另一種類(lèi)型。

文檔-以特定方式以JSON格式定義的字段的集合。每個(gè)文檔都屬于一種類(lèi)型,并且位于索引內(nèi)。每個(gè)文檔都與唯一的標(biāo)識(shí)符(稱(chēng)為UID)相關(guān)聯(lián)。

字段-Elasticsearch字段可以包含多個(gè)相同類(lèi)型的值(本質(zhì)上是一個(gè)列表)。另一方面,在SQL中,一列可以恰好包含所述類(lèi)型的一個(gè)值。

在Django中使用Elasticsearch

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

$ pip install django-elasticsearch-dsl

然后將django_elasticsearch_dsl添加到INSTALLED_APPS

必須在django設(shè)置中定義ELASTICSEARCH_DSL。

例如:

ELASTICSEARCH_DSL={

‘default’: {

‘hosts’: ‘localhost:9200’

},

}

聲明要索引的數(shù)據(jù),然后創(chuàng)建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一起使用,請(qǐng)創(chuàng)建django_elasticsearch_dsl.Document的子類(lèi),在Document類(lèi)中創(chuàng)建一個(gè)Index類(lèi)以定義我們的Elasticsearch索引,名稱(chēng),設(shè)置等,最后使用Registry.register_document裝飾器注冊(cè)該類(lèi)。它需要在應(yīng)用目錄中的documents.py中定義Document類(lèi)。

# 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’,

填充:

要?jiǎng)?chuàng)建和填充Elasticsearch索引和映射,請(qǐng)使用search_index命令:

$python manage.py search_index — rebuild

要獲得更多幫助,請(qǐng)使用命令:

$ python manage.py search_index —help

現(xiàn)在,當(dāng)執(zhí)行以下操作時(shí):

category = Category(

name=“Computer and Accessories”,

desc=“abc desc”

category.save()

該對(duì)象也將保存在Elasticsearch中(使用信號(hào)處理程序)。

搜索:

要獲取elasticsearch-dsl-py搜索實(shí)例,請(qǐng)使用:

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)

要將彈性搜索結(jié)果轉(zhuǎn)換為真實(shí)的Django查詢(xún)集,請(qǐng)注意,這會(huì)花費(fèi)一個(gè)SQL請(qǐng)求來(lái)檢索具有由Elasticsearch查詢(xún)返回的ID的模型實(shí)例。

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)

完畢,如果有任何疑問(wèn),歡迎留言交流。

編輯:jq

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Web
    Web
    +關(guān)注

    關(guān)注

    2

    文章

    1253

    瀏覽量

    69057
  • HTTP
    +關(guān)注

    關(guān)注

    0

    文章

    478

    瀏覽量

    30763
  • Lucene
    +關(guān)注

    關(guān)注

    0

    文章

    6

    瀏覽量

    7626
  • Elasticsearch
    +關(guān)注

    關(guān)注

    0

    文章

    26

    瀏覽量

    2813

原文標(biāo)題:如何在Django中使用ElasticSearch

文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    反向電流應(yīng)用中使用比較器

    電子發(fā)燒友網(wǎng)站提供《反向電流應(yīng)用中使用比較器.pdf》資料免費(fèi)下載
    發(fā)表于 09-19 12:50 ?0次下載
    <b class='flag-5'>在</b>反向電流應(yīng)用<b class='flag-5'>中使</b>用比較器

    反相降壓/升壓拓?fù)?b class='flag-5'>中使用 TPS62120應(yīng)用說(shuō)明

    電子發(fā)燒友網(wǎng)站提供《反相降壓/升壓拓?fù)?b class='flag-5'>中使用 TPS62120應(yīng)用說(shuō)明.pdf》資料免費(fèi)下載
    發(fā)表于 09-10 10:27 ?0次下載
    <b class='flag-5'>在</b>反相降壓/升壓拓?fù)?b class='flag-5'>中使</b>用 TPS62120應(yīng)用說(shuō)明

    設(shè)計(jì)中使用MOSFET安全工作區(qū)曲線(xiàn)

    電子發(fā)燒友網(wǎng)站提供《設(shè)計(jì)中使用MOSFET安全工作區(qū)曲線(xiàn).pdf》資料免費(fèi)下載
    發(fā)表于 09-07 10:55 ?0次下載
    <b class='flag-5'>在</b>設(shè)計(jì)<b class='flag-5'>中使</b>用MOSFET安全工作區(qū)曲線(xiàn)

    高壓應(yīng)用中使用電壓監(jiān)控器

    電子發(fā)燒友網(wǎng)站提供《高壓應(yīng)用中使用電壓監(jiān)控器.pdf》資料免費(fèi)下載
    發(fā)表于 09-02 10:13 ?0次下載
    <b class='flag-5'>在</b>高壓應(yīng)用<b class='flag-5'>中使</b>用電壓監(jiān)控器

    設(shè)計(jì)中使用MOSFET瞬態(tài)熱阻抗曲線(xiàn)

    電子發(fā)燒友網(wǎng)站提供《設(shè)計(jì)中使用MOSFET瞬態(tài)熱阻抗曲線(xiàn).pdf》資料免費(fèi)下載
    發(fā)表于 08-28 09:21 ?15次下載
    <b class='flag-5'>在</b>設(shè)計(jì)<b class='flag-5'>中使</b>用MOSFET瞬態(tài)熱阻抗曲線(xiàn)

    vscode中ESP-IDF中使用以太網(wǎng)時(shí)出現(xiàn)報(bào)錯(cuò)的原因?

    各位大佬你們好,我vscode中ESP-IDF中使用以太網(wǎng)時(shí),出現(xiàn)了下圖的錯(cuò)誤,想知道如何解決,這是軟件上可以解決的問(wèn)題,還是因?yàn)橛布霈F(xiàn)問(wèn)題導(dǎo)致的。
    發(fā)表于 06-06 07:24

    Rust編寫(xiě)的首個(gè)Postgres基礎(chǔ)Elasticsearch開(kāi)源替代品問(wèn)世

    PostgreSQL 的生態(tài)確實(shí)越來(lái)越繁榮了,基于 PG 的擴(kuò)展與衍生中,我們已經(jīng)有了基于 MongoDB 開(kāi)源替代 —— FerretDB,SQL Server 開(kāi)源替代 Babelfish
    的頭像 發(fā)表于 02-22 11:34 ?643次閱讀
    Rust編寫(xiě)的首個(gè)Postgres基礎(chǔ)<b class='flag-5'>Elasticsearch</b>開(kāi)源替代品問(wèn)世

    Python Web框架Django 5.0新特性

    根據(jù) JetBrains 公布的 2022 Python 開(kāi)發(fā)者調(diào)查結(jié)果,Python Web 框架的三巨頭依舊是 Flask、Django 和 FastAPI。Django 和 Flask 的使用率排名并列第一。
    的頭像 發(fā)表于 12-06 13:37 ?973次閱讀

    源譯識(shí) | 譯文分享:Elasticsearch訴Amazon商標(biāo)侵權(quán)案

    【編者按】 ElasticSearch是歸屬Elastic公司的一個(gè)開(kāi)源項(xiàng)目,提供分布式、高擴(kuò)展、高實(shí)時(shí)的搜索與數(shù)據(jù)分析引擎。Amazon公司于2015年基于ElasticSearch推出了自己
    的頭像 發(fā)表于 11-06 19:10 ?596次閱讀

    Pycharm+Django安裝及配置

    提供了配置模板: 能直接在新建項(xiàng)目的時(shí)候選擇Django并新建一個(gè)獨(dú)立的虛擬環(huán)境: 從新建到編碼測(cè)試,一套流程用起來(lái)都極其方便。 1.下載Pycharm jetbrains官網(wǎng)選擇相應(yīng)的系統(tǒng)下載
    的頭像 發(fā)表于 11-02 11:28 ?1038次閱讀
    Pycharm+<b class='flag-5'>Django</b>安裝及配置

    基于Django的Celery異步任務(wù)和定時(shí)任務(wù)的實(shí)戰(zhàn)教程

    有用的話(huà)點(diǎn)個(gè)贊/在看吧! 1.配置Django Celery 配置celery主要有幾點(diǎn): settings.py的同級(jí)目錄下,創(chuàng)建celery.py文件(名字自己隨意?。@個(gè)文件主要是用來(lái)
    的頭像 發(fā)表于 11-02 10:45 ?533次閱讀
    基于<b class='flag-5'>Django</b>的Celery異步任務(wù)和定時(shí)任務(wù)的實(shí)戰(zhàn)教程

    Python 更新 Elasticsearch 的幾種方法

    全文檢索、結(jié)構(gòu)化搜索、分析以及這三個(gè)功能的組合 全局更新 Elasticsearch 中,通過(guò)指定文檔的 _id , 使用 Elasticsearch 自帶的 index api 可以實(shí)現(xiàn)插入一條
    的頭像 發(fā)表于 11-01 10:11 ?975次閱讀
    Python 更新 <b class='flag-5'>Elasticsearch</b> 的幾種方法

    基于Django+Vue的前后端分離開(kāi)發(fā)教程

    眾所周知,Django對(duì)于網(wǎng)站快速開(kāi)發(fā)非常友好,這得益于框架為我們做了很多事情,讓我們只需要做一些簡(jiǎn)單的配置和邏輯即可把網(wǎng)站的功能開(kāi)發(fā)出來(lái)。 但是,使用Django的過(guò)程中,有一個(gè)地方一直是比較
    的頭像 發(fā)表于 11-01 09:22 ?862次閱讀
    基于<b class='flag-5'>Django</b>+Vue的前后端分離開(kāi)發(fā)教程

    SpringBoot 連接ElasticSearch的使用方式

    在上篇 ElasticSearch 文章中,我們?cè)敿?xì)的介紹了 ElasticSearch 的各種 api 使用。 實(shí)際的項(xiàng)目開(kāi)發(fā)過(guò)程中,我們通?;谀承┲髁骺蚣芷脚_(tái)進(jìn)行技術(shù)開(kāi)發(fā),比如
    的頭像 發(fā)表于 10-09 10:35 ?642次閱讀

    Elasticsearch存在的各種漏洞問(wèn)題

    elasticsearch 8 之前使用的一個(gè)老系統(tǒng)使用了elasticsearch7.x版本,之后又反應(yīng)es版本存在各種漏洞 無(wú)奈只能做版本升級(jí)來(lái)解決問(wèn)題,計(jì)劃是將版本升級(jí)到8.x,在網(wǎng)上了解了下
    的頭像 發(fā)表于 09-30 10:40 ?2984次閱讀
    <b class='flag-5'>Elasticsearch</b>存在的各種漏洞問(wèn)題