搜尋是一個網站的基礎功能,一個好的搜尋系統可以直接促進頁面通路量的提升,目前流行的搜尋系統方案都是基于開源的Elasticsearch和Solr搭建。本文以食譜搜尋場景為例,介紹如何利用阿裡雲Elasticsearch快速搭建一個搜尋系統。
閱讀本文,需要先了解了Elasticsearch相關概念,如索引、類型、文檔、映射等。
由于阿裡雲Elasticsearch目前支援的網絡類型隻有使用者自有的專有網絡(VPC),是以在開通Elasticsearch服務時,如果沒有實作建立好的專有網絡可選擇,則會預設建立一個專有網絡。
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyZuBnL4QmMhNzY2M2M5EWMhRmZzE2MwYjZ3YGZhZ2YzIzYkFGNygDMjNjZ18CXt92Yu4GZjlGbh5SZslmZxl3Lc9CX6MHc0RHaiojIsJye.png)
如上圖所示,爬蟲從網上抓取食譜資料,先經過關鍵詞提取和加工,得到搜尋源資料,然後通過索引建構器調用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執行指令分别如下:
場景1.
場景2.
場景3.
場景4.
場景5,搜尋出流量次數TOP100的食譜
該場景需要用到搜尋排序,并指定搜尋傳回的記錄數是100(預設為10)。
阿裡雲Elasticsearch已正式釋出啦,Elastic開源官方聯合開發,內建5.5商業版本XPack功能,歡迎開通使用。
<a href="https://data.aliyun.com/product/elasticsearch">點選了解更多産品資訊</a>