天天看點

使用Elasticsearch快速搭建食譜搜尋系統

搜尋是一個網站的基礎功能,一個好的搜尋系統可以直接促進頁面通路量的提升,目前流行的搜尋系統方案都是基于開源的Elasticsearch和Solr搭建。本文以食譜搜尋場景為例,介紹如何利用阿裡雲Elasticsearch快速搭建一個搜尋系統。

閱讀本文,需要先了解了Elasticsearch相關概念,如索引、類型、文檔、映射等。

由于阿裡雲Elasticsearch目前支援的網絡類型隻有使用者自有的專有網絡(VPC),是以在開通Elasticsearch服務時,如果沒有實作建立好的專有網絡可選擇,則會預設建立一個專有網絡。

使用Elasticsearch快速搭建食譜搜尋系統

如上圖所示,爬蟲從網上抓取食譜資料,先經過關鍵詞提取和加工,得到搜尋源資料,然後通過索引建構器調用Elasticsearch提供的Rest API完成索引的建立。同時,提取出食材名稱和食譜标簽靜态資料,用于後續搜尋過程中,調Elasticsearch服務前的業務判斷。

如下是一個典型的經過爬蟲抓取、加工處理後用于搜尋的食譜資料,索引建構器基于該資料結建構立索引和文檔。

設計的搜尋場景如下:

場景1,根據食譜名稱精确比對

輸入 水煮牛肉

輸出 水煮牛肉食譜

場景2,根據單個食材名稱模糊比對主料和配料,得到包含該食材的食譜清單

輸入 牛肉

輸出 相關食譜清單

場景3,根據多個名稱組合,可能是食材名稱/食譜名稱/食譜标簽,比對相關食譜清單

輸入 牛肉 川菜

場景4,根據食譜标簽比對包含該标簽的食譜清單

輸入 川菜

輸出 包含“川菜”标簽的食譜清單

場景5,搜尋出浏覽次數TOP10的食譜

阿裡雲Elasticsearch預設關閉了自動建立索引功能,需要先建立好索引。索引的分析器使用阿裡雲Elasticsearch服務預置的IK Analyzer插件,該插件也是開源社群熱門的中文分詞分析器,結合食譜搜尋的場景,使用ik_smart分析器對文本進行粗粒度的拆分。

根據搜尋場景的需求,需要建立一個索引(Index),包含一個類型(Type),其中食譜名稱(recipeName)、主要食材(mainFood)、輔助食材(subFood)、食譜标簽(recipeTag)都是可被分詞索引的,浏覽次數(viewNum)可被索引但不進行分詞,剩餘不用于搜尋的字段可不進行索引。

建立索引的指令如下:

本文所設計的食譜搜尋系統是一個實時的搜尋系統,爬蟲會不斷的抓取資料,經過提取加工後由索引建構器調API建立文檔,這樣也能發揮ElasticSearch在實時搜尋方面的優勢。

如果有需要在ElasticSearch中大批量建立文檔的需求,可以選擇使用阿裡雲資料內建服務從OSS中抽取服務導入到ElasticSearch。

文檔建立指令如下:

針對以上場景的需求,搜尋背景的邏輯如下圖所示:

使用Elasticsearch快速搭建食譜搜尋系統

各個場景下的搜尋過程對應Elasticsearch執行指令分别如下:

場景1.

場景2.

場景3.

場景4.

場景5,搜尋出流量次數TOP100的食譜

該場景需要用到搜尋排序,并指定搜尋傳回的記錄數是100(預設為10)。

使用Elasticsearch快速搭建食譜搜尋系統

阿裡雲Elasticsearch已正式釋出啦,Elastic開源官方聯合開發,內建5.5商業版本XPack功能,歡迎開通使用。

<a href="https://data.aliyun.com/product/elasticsearch">點選了解更多産品資訊</a>

繼續閱讀