在django中棺耍,使用haystack贡未,Elasticsearch實現搜索功能

使用haystack,Elasticsearch實現商品搜索流程

from Mp
ps: 本文章意在自己練手時運用搜索功能蒙袍,docker正常不會這么用(怕誤導人嘻嘻嘻)

從線上獲取鏡像

docker image pull delron/elasticsearch-ik:2.4.6-1.0

修改提供的elasticsearc-2.4.6壓縮包內config的.yml文件內容

network.host: 自己機器的IP地址

創(chuàng)建docker容器運行
/home/python/Desktop/elasticsearch-2.4.6/config 為配置文件路徑

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

使用haystack對接Elasticsearch

安裝haystack

pip install drf-haystack
pip install elasticsearch==2.4.1

配置

INSTALLED_APPS = [
    ...
    'haystack',
]

# 配置Haystack搜索引擎后端
HAYSTACK_CONNECTIONS = {
    'default': {
        'ENGINE': 'haystack.backends.elasticsearch_backend.ElasticsearchSearchEngine',
        # 端口號固定為9200
        'URL': 'http://192.168.188.136:9200/',
        # 指定elasticsearch建立的索引庫的名稱
        'INDEX_NAME': 'md_mall',
    },
}
# 當添加俊卤、修改、刪除數據時害幅,自動生成索引  es自動重建索引
# 保證了在Django運行起來后消恍,有新的數據產生時,haystack仍然可以讓Elasticsearch實時生成新數據的索引
HAYSTACK_SIGNAL_PROCESSOR = 'haystack.signals.RealtimeSignalProcessor'

模板文件

# 在模板中指定搜索列
templates/search/indexes/模型類名稱/模型類小寫_text.txt

# 內容
{{ object.name }}
{{ object.caption }}

索引類

# 新建search_indexes.py文件

from haystack import indexes
# 繼承可改
from .models import 被搜索的模型類


# 被搜索引擎建立索引的字段索引類
# 類名可改為:xxxxIndex
class XxxxIndex(indexes.SearchIndex, indexes.Indexable):
    """xxxx索引數據模型類"""

    # document=True: 表名該字段是主要進行關鍵字查詢的字段
    # use_template=True: 表示通過模板來指明模型類字段
    # 在模板中指定搜索列 templates/search/indexes/模型類名稱/模型類小寫_text.txt
    text = indexes.CharField(document=True, use_template=True)

    def get_model(self):
        """返回建立索引的模型類"""
        # 模型類可改
        return 模型類 

    def index_queryset(self, using=None):
        """返回建立索引的數據查詢集"""
        # is_launched 是否上架出售
        # 查詢條件可修改
        return self.get_model().objects.filter(is_launched=True)

序列化器

from .search_indexes import XxxxIndex

class XxxxIndexSerializer(HaystackSerializer):
    """
    索引結果序列化器
    檢查前端傳入的參數text以现,并且檢索出數據后再使用這個序列化器返回給前端
    """

    # 向前端返回數據時序列化的字段
    # Haystack通過Elasticsearch檢索出搜索結果后狠怨,
    # 會在數據庫中取出完整的數據庫模型類對象,放到object中
    # 序列化器可改
    object = xxxxSerializer(read_only=True)

    class Meta:
        # 索引類名稱可改
        index_classes = [XxxxIndex]
        fields = (
            'text',  # 用于接收查詢關鍵字
            'object'  # 用于返回查詢結果
        )

創(chuàng)建視圖集

class XxxxSearchViewSet(HaystackViewSet):
    """Xxxx搜索"""

    # 模型類可改
    index_models = [Xxxx]

    serializer_class = XxxxIndexSerializer

    # 分頁
    pagination_class = XxxxListPagination

手動生成初始索引

python manage.py rebuild_index

定義路由

from rest_framework.routers import DefaultRouter
router = DefaultRouter()
router.register('定義的路徑', views.XxxxSearchViewSet, base_name='xxxx_search')
urlpatterns += router.urls

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末邑遏,一起剝皮案震驚了整個濱河市佣赖,隨后出現的幾起案子,更是在濱河造成了極大的恐慌记盒,老刑警劉巖憎蛤,帶你破解...
    沈念sama閱讀 216,997評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異纪吮,居然都是意外死亡俩檬,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 92,603評論 3 392
  • 文/潘曉璐 我一進店門碾盟,熙熙樓的掌柜王于貴愁眉苦臉地迎上來棚辽,“玉大人,你說我怎么就攤上這事巷疼⊥砗” “怎么了?”我有些...
    開封第一講書人閱讀 163,359評論 0 353
  • 文/不壞的土叔 我叫張陵嚼沿,是天一觀的道長估盘。 經常有香客問我,道長骡尽,這世上最難降的妖魔是什么遣妥? 我笑而不...
    開封第一講書人閱讀 58,309評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮攀细,結果婚禮上箫踩,老公的妹妹穿的比我還像新娘。我一直安慰自己谭贪,他們只是感情好境钟,可當我...
    茶點故事閱讀 67,346評論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著俭识,像睡著了一般慨削。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上套媚,一...
    開封第一講書人閱讀 51,258評論 1 300
  • 那天缚态,我揣著相機與錄音,去河邊找鬼堤瘤。 笑死玫芦,一個胖子當著我的面吹牛,可吹牛的內容都是我干的本辐。 我是一名探鬼主播桥帆,決...
    沈念sama閱讀 40,122評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼慎皱!你這毒婦竟也來了环葵?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,970評論 0 275
  • 序言:老撾萬榮一對情侶失蹤宝冕,失蹤者是張志新(化名)和其女友劉穎张遭,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體地梨,經...
    沈念sama閱讀 45,403評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡菊卷,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,596評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了宝剖。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片洁闰。...
    茶點故事閱讀 39,769評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖万细,靈堂內的尸體忽然破棺而出扑眉,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 35,464評論 5 344
  • 正文 年R本政府宣布腰素,位于F島的核電站聘裁,受9級特大地震影響,放射性物質發(fā)生泄漏弓千。R本人自食惡果不足惜衡便,卻給世界環(huán)境...
    茶點故事閱讀 41,075評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望洋访。 院中可真熱鬧镣陕,春花似錦、人聲如沸姻政。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,705評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽汁展。三九已至理肺,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間善镰,已是汗流浹背妹萨。 一陣腳步聲響...
    開封第一講書人閱讀 32,848評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留炫欺,地道東北人乎完。 一個月前我還...
    沈念sama閱讀 47,831評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像品洛,于是被迫代替她去往敵國和親树姨。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,678評論 2 354

推薦閱讀更多精彩內容