Django中使用ElasticSearch
導讀 | Elasticsearch可以使我們快速,近乎實時地儲存,搜尋和分析大量資料,並在幾毫秒內給出答覆。之所以能夠獲得快速的搜尋響應,是因為它可以直接搜尋索引,而不是直接搜尋文字。 |
Elasticsearch是基於Lucene庫的搜尋引擎。它提供了具有HTTP Web介面和無模式JSON文件的分散式,多租戶功能的全文字搜尋引擎。Elasticsearch是用Java開發的。
Elasticsearch可以使我們快速,近乎實時地儲存,搜尋和分析大量資料,並在幾毫秒內給出答覆。之所以能夠獲得快速的搜尋響應,是因為它可以直接搜尋索引,而不是直接搜尋文字。
索引—不同型別的文件和文件屬性的集合。例如,文件集可以包含社交網路應用程式的資料。
型別/對映-共享共享同一索引中存在的一組公共欄位的文件集合。例如,索引包含社交網路應用程式的資料;對於使用者個人資料資料,可以有一種特定的型別,對於訊息傳遞資料,可以有另一種型別,對於註釋資料,可以有另一種型別。
文件-以特定方式以JSON格式定義的欄位的集合。每個文件都屬於一種型別,並且位於索引內。每個文件都與唯一的識別符號(稱為UID)相關聯。
欄位-Elasticsearch欄位可以包含多個相同型別的值(本質上是一個列表)。另一方面,在SQL中,一列可以恰好包含所述型別的一個值。
安裝和配置,安裝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)
完畢,如果有任何疑問,歡迎留言交流。
原文來自:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2777802/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- django中orm的使用DjangoORM
- Django 中 Aggregation聚合的使用Django
- Django中content_type的使用Django
- python django中restful框架的使用PythonDjangoREST框架
- Django中F函式的使用Django函式
- Django中 render() 函式的使用方法Django函式
- elasticsearch的使用Elasticsearch
- 在elasticsearch中簡單的使用script_fieldsElasticsearch
- Elasticsearch使用系列-Docker搭建Elasticsearch叢集ElasticsearchDocker
- 使用Django annotation,提升django查詢效能Django
- ElasticSearch Java API使用ElasticsearchJavaAPI
- Laravel 下 Elasticsearch 使用LaravelElasticsearch
- Elasticsearch使用系列-.NET6對接ElasticsearchElasticsearch
- django中使用celeryDjango
- django專案使用Django
- Elasticsearch 中的 GuiceElasticsearchGUI
- ElasticSearch 中的 MappingElasticsearchAPP
- Django中的QuerySetDjango
- Django中的ForeignKeyDjango
- django下載excel,使用django-excel外掛DjangoExcel
- Django定時任務Django-crontab的使用Django
- 使用dwebsocket在Django中使用WebsocketWebDjango
- 使用 Java API 操作 elasticsearchJavaAPIElasticsearch
- Elasticsearch 安裝和使用Elasticsearch
- elasticsearch中使用runtime fieldsElasticsearch
- Elasticsearch(windows)使用入門ElasticsearchWindows
- 在django中使用celeryDjango
- Django之mako模板使用Django
- Django路由使用問題Django路由
- Django | 訊號使用思考Django
- 在django如何使用中文Django
- django框架使用基本流程Django框架
- Elasticsearch精進之路:elasticsearch-head外掛使用教程Elasticsearch
- Django筆記四十一之Django中使用esDjango筆記
- ElasticSearch中的對映Elasticsearch
- Django中重定向頁面的時候使用名稱空間Django
- 140 form自定錯誤和鉤子,django中cookie的使用ORMDjangoCookie
- Django中如何建立模型?Django模型