一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - Django對接elasticsearch實現全文檢索的示例代碼

Django對接elasticsearch實現全文檢索的示例代碼

2021-12-16 10:21勁風君 Python

搜索是很常用的功能,如果是千萬級的數據應該怎么檢索,本文主要介紹了Django對接elasticsearch實現全文檢索的示例代碼,感興趣的可以了解一下

前言

說到搜索,第一時間想到的是mysql數據庫的like語句

但是,假如你的數據庫有幾千萬條數據,name字段沒有索引,可能查詢需要十幾分鐘,用戶可能會等你?那為什么不給name字段增加索引?數據表不僅僅是用來查詢,也會經常修改數據,新增刪除數據等。建立索引后,做增刪改操作時也會大大占用數據庫資源。所以應該怎么解決呢?

Elasticsearch!

一個強大的基于Lucene的全文搜索服務器!維基百科、Stack Overflow、Github都在用。

如果想詳細了解其原理的話,可以參考:https://www.elastic.co/guide/index.html

第一步:首先安裝相關的依賴包

?
1
2
3
pip install drf-haystack
pip install elasticsearch
pip install djangorestframework

第二步:在django項目配置文件settings.py中注冊應用

?
1
2
3
4
5
6
INSTALLED_APPS =
[
'app.apps.AppConfig',
'haystack',
'rest_framework'
]

第三步:在django項目配置文件settings.py中指定搜索的后端

?
1
2
3
4
5
6
7
8
9
10
11
HAYSTACK_CONNECTIONS = {
'default':    {
            'ENGINE':'haystack.backends.elasticsearch_backend.ElasticsearchSearchEngine',
            'URL': 'http://127.0.0.1:9200/', # 此處為elasticsearch運行的服務器ip地址,端口號固定為9200
            'INDEX_NAME': 'test', # 指定elasticsearch建立的索引庫的名稱
            },
            }
# 當添加、修改、刪除數據時,自動生成索引
HAYSTACK_SIGNAL_PROCESSOR = 'haystack.signals.RealtimeSignalProcessor'
# 指定搜索結果每頁的條數
# HAYSTACK_SEARCH_RESULTS_PER_PAGE = 1

第四步:創建索引類

在此之前要先創建model類,并插入數據

?
1
2
3
4
from django.db import models
class Es(models.Model):
    name=models.CharField(max_length=32)
    desc=models.CharField(max_length=32)

在需要進行索引的應用的目錄下創建文件search_indexes.py, 在該文件內創建該索引類
我在app應用下創建:search_indexes.py

?
1
2
3
4
5
6
7
8
9
10
11
# 索引模型類的名稱必須是 模型類名稱 + Index
from haystack import indexes
from .models import Es
class EsIndex(indexes.SearchIndex, indexes.Indexable):
    text = indexes.CharField(document=True, use_template=True)
    def get_model(self):
    """返回建立索引的模型類"""
        return Es
    def index_queryset(self, using=None):
    """返回要建立索引的數據查詢集"""
        return self.get_model().objects.all()

第五步:在templates目錄中創建text字段使用的模板文件

創建文件templates/search/indexes/app/es_text.txt文件中定義

?
1
2
{{ object.name }}
{{ object.desc }}

第六步:手動更新索引

?
1
python manage.py rebuild_index   #數據庫有多少條數據,全部會被同步到es中

第七步:創建haystack序列化器

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
from drf_haystack.serializers
import HaystackSerializer
from rest_framework.serializers
import ModelSerializer from app
import models
from app.search_indexes import EsIndex
class EsSerializer(ModelSerializer):
    class Meta:
        model=models.Es
        fields='__all__'
class EsIndexSerializer(HaystackSerializer):
     object = EsSerializer(read_only=True) # 只讀,不可以進行反序列化
     class Meta:
        index_classes = [EsIndex]# 索引類的名稱
        fields = ('text', 'object')# text 由索引類進行返回, object 由序列化類進行返回,第一個參數必須是text

第八步:創建視圖類

?
1
2
3
4
5
6
7
from drf_haystack.viewsets
import HaystackViewSet
from app.models import Book
from app.serializers import EsIndexSerializer
class EsSearchView(HaystackViewSet):
    index_models = [Es]
    serializer_class = EsIndexSerializer

第九步:添加路由

?
1
2
3
4
5
6
7
8
9
from django.conf.urls
import url from django.contrib
import admin
from rest_framework import routers
from app.views import EsSearchView
    router = routers.DefaultRouter()
    router.register("book/search", EsSearchView, base_name="book-search")
    urlpatterns = [ url(r'^admin/', admin.site.urls), ]
    urlpatterns += router.urls

第十步:結果

http://127.0.0.1:8000/?text=測試

到此這篇關于Django對接elasticsearch實現全文檢索的示例代碼的文章就介紹到這了,更多相關Django elasticsearch實現全文檢索內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://juejin.cn/post/6991354297728368648

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 黄色大片网站 | 成人xxxxxx| 国产无限制自拍 | 国产98在线 | 日本-区二区三区免费精品 日本破处 | 王淑兰李思雨李铁柱乡村小说免费 | 狠狠色 | 免费一级毛片在级播放 | 四虎论坛 | 俄罗斯妈妈k8影院在线观看 | av中文字幕网免费观看 | 女仆色网址 | 荡女淫春2未删减版 | 1024亚洲精品国产 | 日本在线观看视频 | 亚洲乱亚洲乱妇41p国产成人 | 三级aa久久 | 国产精品久久久久久爽爽爽 | 奇米888在线看奇米999 | 亚洲免费色图 | 亚洲精品91香蕉综合区 | avove本人照片 | 国产精品久久久久久福利 | 国产99久久久国产精品成人 | 骚虎网站在线观看 | 加勒比久草 | 国产精品女主播自在线拍 | 日韩成人小视频 | 亚洲 日韩经典 中文字幕 | 免费超级乱淫播放手机版 | 超级乱淫伦短篇小说做车 | 荷兰艾优apiyoo| 欧美国产日产精品免费视频 | 国产福利一区二区三区 | 色偷偷影院 | 女人和拘做受全过程免费 | 亚州人成网在线播放 | 91插插插插 | 成人午夜爽爽爽免费视频 | 男女18一级大黄毛片免 | 亚洲午夜久久久久国产 |