最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Django+Docker搭建Elasticsearch全文檢索怎么做?詳細(xì)教程來了

 更新時(shí)間:2026年07月24日 08:55:53   作者:Z_Howe  
想知道如何在Django項(xiàng)目中用Docker安裝Elasticsearch并實(shí)現(xiàn)全文檢索嗎?本文詳細(xì)講解從Docker安裝Elasticsearch-ik鏡像、配置Haystack,到創(chuàng)建索引和視圖的完整步驟,幫你輕松集成搜索引擎

Django + Docker完成es全文檢鎖

使用Docker安裝Elasticsearch

1.獲取Elasticsearch-ik鏡像

#從倉庫拉取鏡像
$ sudo docker image pull delron/elasticsearch-ik:2.4.6-1.0
#解壓教學(xué)資料中本地鏡像
$ sudo docker load -i elasticsearch-ik-2.4.6_docker.tar

2.配置Elasticsearch-ik

將教學(xué)資料中的elasticsearc-2.4.6目錄拷貝到home目錄下。

修改/home/python/elasticsearc-2.4.6/config/elasticsearch.yml第54行。

更改ip地址為本機(jī)真實(shí)ip地址。

3.使用Docker運(yùn)行Elasticsearch-ik

$ sudo docker run -dti --name=elasticsearch --network=host -v /home/python/elasticsearch-2.4.6/config:/usr/share/elasticsearch/config delron/elasticsearch-ik:2.4.6-1.0

Haystack介紹和安裝配置 

1.Haystack介紹

Haystack 是在Django中對(duì)接搜索引擎的框架,搭建了用戶和搜索引擎之間的溝通橋梁。

我們在Django中可以通過使用 Haystack 來調(diào)用 Elasticsearch 搜索引擎。

Haystack 可以在不修改代碼的情況下使用不同的搜索后端(比如 Elasticsearch、Whoosh、Solr等等)。

2.Haystack安裝

$ pip install django-haystack
$ pip install elasticsearch==2.4.1

3.Haystack注冊應(yīng)用和路由

# settings.py中配置
INSTALLED_APPS = [
    'haystack', # 全文檢索
]
path('search/', include('haystack.urls')),

4.Haystack配置在配置文件中配置Haystack為搜索引擎后端

#Haystack
HAYSTACK_CONNECTIONS = {
    'default': {
        'ENGINE': 'haystack.backends.elasticsearch_backend.ElasticsearchSearchEngine',
        'URL': 'http://192.168.103.158:9200/', # Elasticsearch服務(wù)器ip地址,端口號(hào)固定為9200
        'INDEX_NAME': 'meiduo_mall', # Elasticsearch建立的索引庫的名稱
    },
}

#額外的配置,可加可以不加

#當(dāng)添加、修改、刪除數(shù)據(jù)時(shí),自動(dòng)生成索引

HAYSTACK_SIGNAL_PROCESSOR = ‘haystack.signals.RealtimeSignalProcessor'

重要提示:

HAYSTACK_SIGNAL_PROCESSOR 配置項(xiàng)保證了在Django運(yùn)行起來后,有新的數(shù)據(jù)產(chǎn)生時(shí),Haystack仍然可以讓Elasticsearch實(shí)時(shí)生成新數(shù)據(jù)的索引

Haystack建立數(shù)據(jù)索引

1.創(chuàng)建索引類

通過創(chuàng)建索引類,來指明讓搜索引擎對(duì)哪些字段建立索引,也就是可以通過哪些字段的關(guān)鍵字來檢索數(shù)據(jù)。

本項(xiàng)目中對(duì)SKU信息進(jìn)行全文檢索,所以在goods應(yīng)用中新建search_indexes.py文件(注意名字必須相同),用于存放索引類。

代碼:

from haystack import indexes

from .models import  模型名稱


class  模型名稱Index(indexes.SearchIndex, indexes.Indexable):


 """模型名稱索引數(shù)據(jù)模型類"""

 text = indexes.CharField(document=True, use_template=True)


 def get_model(self):

  """返回建立索引的模型類"""

return 模型名稱


  def index_queryset(self, using=None):

  """返回要建立索引的數(shù)據(jù)查詢集"""

 return self.get_model().objects.filter(is_launched=True)
  • 索引類SKUIndex說明:

  • 在SKUIndex建立的字段,都可以借助Haystack由Elasticsearch搜索引擎查詢。

  • 其中text字段我們聲明為document=True,表名該字段是主要進(jìn)行關(guān)鍵字查詢的字段。

  • text字段的索引值可以由多個(gè)數(shù)據(jù)庫模型類字段組成,具體由哪些模型類字段組成,我們用use_template=True表示后續(xù)通過模板來指明。

2.創(chuàng)建text字段索引值模板文件

在templates目錄中創(chuàng)建text字段使用的模板文件

具體在templates/search/indexes/goods/sku_text.txt文件(需要?jiǎng)?chuàng)建的文件夾,注意文件名相同)中定義

{{ object.id }}
{{ object.name }}
{{ object.caption }}

模板文件說明:當(dāng)將關(guān)鍵詞通過text參數(shù)名傳遞時(shí)

此模板指明SKU的id、name、caption作為text字段的索引值來進(jìn)行關(guān)鍵字索引查詢。

3.手動(dòng)生成初始索引

#先再數(shù)據(jù)庫中添加數(shù)據(jù),再執(zhí)行生成索引

python manage.py rebuild_index

在view視圖中的實(shí)現(xiàn)es查詢的視圖

#調(diào)用時(shí)需要用get傳入q=查詢的內(nèi)容
from django.shortcuts import render
#Create your views here.
import json
from django.conf import settings
from django.core.paginator import InvalidPage, Paginator
from django.http import Http404, HttpResponse, JsonResponse
from haystack.forms import ModelSearchForm
from haystack.query import EmptySearchQuerySet

RESULTS_PER_PAGE = getattr(settings, 'HAYSTACK_SEARCH_RESULTS_PER_PAGE', 20)


def basic_search(request, load_all=True, form_class=ModelSearchForm, searchqueryset=None, extra_context=None,
                 results_per_page=None):
    query = ''
    results = EmptySearchQuerySet()
    if request.GET.get('q'):
        form = form_class(request.GET, searchqueryset=searchqueryset, load_all=load_all)

        if form.is_valid():
            query = form.cleaned_data['q']
            results = form.search()
    else:
        form = form_class(searchqueryset=searchqueryset, load_all=load_all)

    paginator = Paginator(results, results_per_page or RESULTS_PER_PAGE)
    try:
        page = paginator.page(int(request.GET.get('page', 1)))
    except InvalidPage:
        result = {"code": 404, "msg": 'No file found!', "data": []}
        return HttpResponse(json.dumps(result), content_type="application/json")

    context = {
        'form': form,
        'page': page,
        'paginator': paginator,
        'query': query,
        'suggestion': None,
    }
    if results.query.backend.include_spelling:
        context['suggestion'] = form.get_suggestion()

    if extra_context:
        context.update(extra_context)

    jsondata = []
    print(len(page.object_list))
    for result in page.object_list:
        data = {
            'pk': result.object.pk,
            'title': result.object.title,
            'desc': result.object.desc,
        }
        jsondata.append(data)
    result = {"code": 200, "msg": 'Search successfully!', "data": jsondata}
    return JsonResponse(result, content_type="application/json")

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • python定間隔取點(diǎn)(np.linspace)的實(shí)現(xiàn)

    python定間隔取點(diǎn)(np.linspace)的實(shí)現(xiàn)

    今天小編就為大家分享一篇python定間隔取點(diǎn)(np.linspace)的實(shí)現(xiàn),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • Python序列類型的打包和解包實(shí)例

    Python序列類型的打包和解包實(shí)例

    今天小編就為大家分享一篇Python序列類型的打包和解包實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • python中的逆序遍歷實(shí)例

    python中的逆序遍歷實(shí)例

    今天小編就為大家分享一篇python中的逆序遍歷實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • python 處理微信對(duì)賬單數(shù)據(jù)的實(shí)例代碼

    python 處理微信對(duì)賬單數(shù)據(jù)的實(shí)例代碼

    本文通過實(shí)例代碼給大家介紹了python 處理微信對(duì)賬單數(shù)據(jù),代碼簡單易懂,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-07-07
  • python3.9不支持pillow包解決辦法

    python3.9不支持pillow包解決辦法

    本文主要介紹了python3.9不支持pillow包解決辦法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-06-06
  • 最新評(píng)論

    宁陵县| 清涧县| 盐源县| 麻阳| 兴化市| 永州市| 景泰县| 鄂州市| 高碑店市| 新沂市| 葫芦岛市| 通化县| 阜城县| 永平县| 枣阳市| 临沂市| 汨罗市| 雅江县| 平度市| 米脂县| 天门市| 庆阳市| 江油市| 灵川县| 简阳市| 裕民县| 崇州市| 诸城市| 中方县| 营口市| 太谷县| 梧州市| 翁牛特旗| 三河市| 宜春市| 视频| 晋城| 澄江县| 灵宝市| 白山市| 蕲春县|