自建搜索引擎-基于美麗云

Meilisearch 是一個搜索引擎,主程序完全開源,除了使用官方提供的美麗云服務(收費)進行對接之外,還可以通過自建搜索引擎來實現完全獨立的搜索服務。

由于成本問題,本博客采用自建的方式,本文就講講怎么搭建。

?

本文主要參考:

  • meilisearch 全接入指南 | 二丫講梵:講了怎么使用官方提供的服務,也講了怎么自建
  • Meilisearch Documentation:官網文檔

?

前置工作

  • 博客已配置 sitemap 功能,參考 VuePress 博客之 SEO 優化(一)之 sitemap 與搜索引擎收錄 - 知乎
  • 自建時要用到自定義的域名,因此額外購買了一個二級域名的 SSL 證書,例如我用的是 search.peterjxl.com

?

?

安裝和啟動美麗云

首先需要在服務器上安裝美麗云搜索:

curl -L https://install.meilisearch.com | sh

?

?

我在用 curl 安裝的時候,發現有報錯,推測是 GFW 的問題,改為用 Docker 安裝(有很多安裝方式,參考安裝指南):

docker pull getmeili/meilisearch:v1.6

?

然后啟動命令格式為:

docker run -itd --name meilisearch -p 7700:7700 \-e MEILI_ENV="production" -e MEILI_NO_ANALYTICS=true \-e MEILI_MASTER_KEY="自定義一個不少于16字節的秘鑰" \-v $(pwd)/meili_data:/meili_data \getmeili/meilisearch:v1.6

注意修改 master-key,該密鑰用于爬蟲抓取使用(就是爬取你的博客內容并做好分詞、索引等)。

啟動后可以用 docker ps 查看容器狀態,或者用 telnet 檢查端口是否被監聽。

?

配置 Nginx

首先去阿里云上配置 DNS 解析記錄:

在這里插入圖片描述

?

?

這個結合自身情況添加配置(例如我用的是 Nginx):

server {listen 80;listen 443 ssl;server_name search.peterjxl.com;ssl_certificate /conf/search.peterjxl.com.pem;ssl_certificate_key /conf/search.peterjxl.com.key;ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;ssl_protocols TLSv1 TLSv1.1 TLSv1.2;ssl_prefer_server_ciphers on;location / {proxy_set_header Host $host;proxy_set_header   X-Forwarded-Proto $scheme;proxy_set_header   X-Real-IP         $remote_addr;proxy_pass http://127.0.0.1:7700;}}

?

配置后記得重啟 Nginx,并且記得開通防火墻,然后嘗試訪問子域名,可以看到正常轉發了請求:

在這里插入圖片描述

?

?

建立索引

接下來,我們通過美麗云提供的爬蟲功能,將博客數據創建成索引,相關文檔請見:Integrate a relevant search bar to your documentation — Meilisearch documentation。

其中,提供了一個關于 VuePress 的配置文件模板:

If you use VuePress for your documentation, you can check out the configuration file we use in production. In our case, the main container is theme-default-content? and the selector titles and subtitles are h1?, h2?…

{"index_uid": "docs","sitemap_urls": ["https://docs.meilisearch.com/sitemap.xml"],"start_urls": ["https://docs.meilisearch.com"],"selectors": {"lvl0": {"selector": ".sidebar-heading.open","global": true,"default_value": "Documentation"},"lvl1": ".theme-default-content h1","lvl2": ".theme-default-content h2","lvl3": ".theme-default-content h3","lvl4": ".theme-default-content h4","lvl5": ".theme-default-content h5","text": ".theme-default-content p, .theme-default-content li, .theme-default-content td"},"strip_chars": " .,;:#","scrap_start_urls": true,"custom_settings": {"synonyms": {"relevancy": ["relevant", "relevance"],"relevant": ["relevancy", "relevance"],"relevance": ["relevancy", "relevant"]}}
}

?

注意如上的配置內容很重要,如果你的博客不是常規默認的,那么需要根據自己的情況對元素進行辨別,詳細配置項說明,參考官方文檔:更多可選字段 。

?

我用的配置如下:

{"index_uid": "VuePressBlog","sitemap_urls": ["https://www.peterjxl.com/sitemap.xml"],"start_urls": ["https://www.peterjxl.com"],"selectors": {"lvl0": {"selector": "h1","global": true,"default_value": "Documentation"},  "lvl1": ".theme-vdoing-content h2","lvl2": ".theme-vdoing-content h3","lvl3": ".theme-vdoing-content h4","lvl4": ".theme-vdoing-content h5","lvl5": ".theme-vdoing-content h6","text": ".theme-vdoing-content p, .theme-vdoing-content li"},  "strip_chars": " .,;:#","scrap_start_urls": true,"selectors_exclude": ["iframe", ".katex-block", ".md-flowchart", ".md-mermaid", ".md-presentation.reveal.reveal-viewport", ".line-numbers-mode", ".code
-group", ".footnotes", "footer.page-meta", ".page-nav", ".comments-wrapper"]

?

index_uid? :為索引名稱,如果服務端沒有,則會自動創建。接下來我們將這個配置文件放到服務器上,然后通過如下命令運行爬蟲對內容進行抓取(注意修改相關參數):

docker run -t --rm \--network=host \-e MEILISEARCH_HOST_URL='二級域名,例如我的是search.peterjxl.com' \-e MEILISEARCH_API_KEY='剛剛創建的Master Key' \-v 配置文件完整路徑:/docs-scraper/config.json \getmeili/docs-scraper:v0.12.7 pipenv run ./docs_scraper config.json

?

?

執行過程中可以看到每個頁面都進行了抓取(爬取過程會比較久,這取決于博客的內容數量):

在這里插入圖片描述

?

?

?

創建搜索用的 key

在美麗云中,有兩種密鑰:

  • master-key:權限很大,例如創建,更新,刪除索引。
  • API Key:權限很小,一般只用于搜索,可以有多個

更多說明可以參考官網文檔:Master key and API keys — Meilisearch documentation。

由于 master-key 權限很大,不宜暴露,因此我們可以創建一個只有搜索權限的 API Key(用來搜索),命令格式:

curl \-X POST 'http://localhost:7700/keys' \-H 'Content-Type: application/json' \-H 'Authorization: Bearer 剛剛自定義的master-key' \--data-binary '{"description": "peterjxl.com search_key","actions": ["search"],"indexes": ["剛剛創建的index_id"],"expiresAt": "2099-01-01T00:00:00Z"}'

?

然后會返回一串 JSON,其中的 key 就是我們需要的(已脫敏):

{"name": null,"description": "peterjxl.com search_key","key": "xxxx","uid": "xxxx","actions": ["search"],"indexes": ["wiki"],"expiresAt": "2099-01-01T00:00:00Z","createdAt": "2024-01-17T12:54:42.357819802Z","updatedAt": "2024-01-17T12:54:42.357819802Z"
}

?

?

測試搜索

我們可以使用 Postman 來測試搜索效果(如果使用了美麗云的服務,可以在其官網進行搜索測試)

相關文檔:Postman collection for Meilisearch — Meilisearch documentation (圖片需科學上網后看到)

配置好后,可以進行搜索,效果如下:

在這里插入圖片描述

?

配置 VuePress

接下來就是在 VuePress 中集成美麗云了。

客戶端的配置相對簡單,因為 meilisearch 的官方文檔用的也是 Vuepress,因此官方也維護了一個 Vuepress 的插件,安裝:

npm install vuepress-plugin-meilisearch

?

然后在配置插件的部分添加相關配置:

// 全文搜索插件 meilisearch['vuepress-plugin-meilisearch',{hostUrl: 'https://search.peterjxl.com',        // meilisearch 服務端域名apiKey: "剛剛創建的搜索key", // 只有搜索權限的 keyindexUid: 'VuePressBlog',placeholder: '支持全文搜索',           // 在搜索欄中顯示的占位符maxSuggestions: 9,                      // 最多顯示幾個搜索結果cropLength: 30,                         // 每個搜索結果最多顯示多少個字符},],

?

?

然后本地運行,試試效果:

在這里插入圖片描述

?

?

?

配置 GitHub Action

如果每次更新了博客,都重新運行建立索引的命令,也太麻煩了。我們可以腳本化,或者使用 GitHub Action。例如,添加如下配置:

  scrape-docs:needs: test_websiteruns-on: ubuntu-20.04steps:- uses: actions/checkout@v2- uses: actions/setup-node@v2with:node-version: 14registry-url: https://registry.npmjs.org/- name: Run docs-scraperenv:API_KEY: ${{ secrets.MEILISEARCH_API_KEY }}CONFIG_FILE_PATH: ${{ github.workspace }}/docs/.vuepress/public/data/docs-scraper-config.jsonrun: |docker run -t --rm \-e MEILISEARCH_HOST_URL="https://search.peterjxl.com" \-e MEILISEARCH_API_KEY=$API_KEY \-v $CONFIG_FILE_PATH:/docs-scraper/config.json \getmeili/docs-scraper:v0.12.7 pipenv run ./docs_scraper config.json

?

注意這 3 個配置:

  • secrets.MEILISEARCH_API_KEY?:就是 Master key
  • CONFIG_FILE_PATH?:爬蟲抓取時的配置文件,可以選擇放在項目源碼的某個指定目錄(例如我的是? docs/.vuepress/config/?)
  • MEILISEARCH_HOST_URL?:美麗云的域名,例如我的是? https://search.peterjxl.com?

?

配置完后,當我們提交了新的代碼,就會自動爬取博客數據并更新索引了,GitHub Action 執行情況:

在這里插入圖片描述

?

?

?

(完)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/44213.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/44213.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/44213.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

通過git將文件push到github 遠程倉庫

1.先git clone 代碼地址 git clone htttp://github.com/用戶名/test.git 2. 添加文件 例如:touch 1.txt 3.將文件添加到暫存區 git add 1.txt 4.提交 git commit -m "commit 1.txt" 5.與遠程倉庫建立關聯 git remote add 遠程倉庫名 遠程倉庫…

(2024)docker-compose實戰 (9)部署多項目環境(LAMP+react+vue+redis+mysql+nginx)

前言 本系列最初的想法就是搭建一個多項目的環境, 包含nginx, nodejs, php, html, redis, MongoDB, mysql.本文使用的PHP鏡像為php:7.3.6-apache, 這里可以使用上一篇文章中生成好的鏡像.LAMP或包含react或vue的前端項目, 本文就各寫了一個, 可以按照實際需求, 自行添加多個容…

LLM 研究方向(一): LLM Prompts--p-tuning、LoRA

目錄 1. prompt-tuning background 2. Prompt Tuning 模型介紹 2.1 2021 prefix-tuning 2.2 2021 P-tuning v1 2.3 2021 Parameter-efficient prompt tuning (PET) 2.4 2022 P-tuning v2 2.5 2019 Adapter ?2.6 2021 LoRA (Low-Rank Adaptation) 2.7 2024 DoRA (…

詳解[USACO07OPEN] Cheapest Palindrome G(洛谷PP2890)(區間DP經典題)

題目 思路 考慮區間DP。 設dp[i][j]為從i到j這段區間被修正為回文串的最小花費 c[cc][1]為添加字符cc的花費 c[cc][2]為刪去字符cc的花費 s為題目給出的字符串。 用[i 1,j]區間轉移:這種轉移相當于在[i1,j]區間的左邊加入一個字符,讓[i,j]變為回文的方…

SQL 游標

關系數據庫中的操作會對整個行集起作用。 例如,由 SELECT 語句返回的行集包括滿足該語句的 WHERE 子句中條件的所有行。 這種由語句返回的完整行集稱為結果集。 應用程序,特別是交互式聯機應用程序,并不總能將整個結果集作為一個單元來有效地…

安裝Go語言常用工具

好的,這里是常用的Go工具,包括下載地址、在線安裝指令和離線安裝步驟。 1. gopls (Go language server) 功能: 提供代碼補全、跳轉定義、文檔提示等IDE功能。 下載地址: golang.org/x/tools/gopls 在線安裝命令 : sh 復制代碼 go install golang.org/…

云倉適合什么商家?

1、電商平臺和網店: 對于擁有大量在線訂單但沒有自建倉儲和物流能力的小型和中型電商企業,云倉可以在成本和效率上提供顯著優勢,幫助快速處理訂單并縮短配送時間。 —————————————————————————————————— …

根據關鍵詞query獲取google_img(api方式)

文章目錄 說明代碼第一部分:鏈接保存為Json第二部分:鏈接轉換為img 說明 根據關鍵詞query獲取google_img USERNAME “xxx” PASSWORD “xxx” 官網申請。 代碼 首先獲取圖片鏈接,保存為json之后下載。 第一部分:鏈接保存為…

.net 8 使用 quic 協議通訊

debian環境安裝 quic支持 # 1. 添加unstable倉庫(如果您使用的是Debian的不穩定分支) sudo apt install apt-transport-https ca-certificates sudo wget -O /etc/apt/trusted.gpg.d/microsoft.gpg https://packages.microsoft.com/keys/microsoft.asc …

【獨家揭秘】視頻號矩陣系統火爆上線,一鍵式多平臺管理,你的內容營銷神器!

在信息爆炸的時代,內容創作者們面臨著前所未有的挑戰與機遇。如何讓自己的內容在眾多平臺中脫穎而出,快速傳播并吸引大量觀眾,成為了每個創作者關注的焦點。近日,一款名為“迅狐視頻號矩陣系統”的神器震撼來襲,它以其…

UV膠,它是否有毒?如同那些隱藏在黑暗中的危險之物?

UV膠,它是否有毒?如同那些隱藏在黑暗中的危險之物? 關于uv膠的毒性問題,或許我們可以這樣深入探討。UV膠,如同一位戴著神秘面紗的訪客,在我們的生活中悄然出現,卻帶著諸多疑問。那么&#xff0…

二維碼生成需知:名片二維碼尺寸多少合適?電子名片二維碼制作方法?

隨著數字化時代的到來,二維碼在各個領域的應用越來越廣泛,名片作為商業交流的重要工具之一,也開始逐漸融入二維碼的元素。通過在名片上添加二維碼,我們可以輕松實現信息的快速傳遞和分享。然而,名片二維碼的尺寸選擇成…

Monorepo倉庫管理策略之 Lerna

這里寫目錄標題 前言:一、簡介二、新建項目使用安裝生成結構 三、復用現有項目執行命令查看包 四、配置package相互引用導入現有的包 五、發布包確定項目版本發布項目添加項目到到git發布包到NPM包發布出錯解決方案 五、實例代碼 前言: 將大型代碼倉庫分…

Python 與扣子 API的鏈接

當 Python 與各種 API 進行鏈接時,更是能碰撞出無數精彩的火花,為我們的開發工作帶來極大的便利和創新。今天,咱們就來聊聊 Python 與扣子 API 的鏈接那些事兒。 扣子 API 作為一種新興的技術接口,為我們提供了豐富的數據和功能。…

文心一言的流式接口數據進行處理 增加屬性

需求:需要對文心一言的流式接口數據進行處理 增加屬性 return ResponseEntity.ok().header("Access-Control-Allow-Origin", "*").contentType(org.springframework.http.MediaType.TEXT_EVENT_STREAM).cacheControl(org.springframework.http…

python調用串口收發數據

1、確認串口信息 2、安裝pyserial庫 打開終端或命令行,敲入這行命令:pip install pyserial 3、python編程 import serial def main(): #創建串口對象 ser serial.Serial(COM4, 9600, timeout1) if not ser.isOpen(): print("串…

飛睿智能6公里WiFi圖傳接收模塊,低延遲、抗干擾、高速穩定傳輸數據,無人機、農田遠距離WiFi模塊

在科技日新月異的今天,無線通信技術正以前所未有的速度發展,不僅改變了我們的生活方式,還為企業帶來了前所未有的商業機遇。今天,我要向大家介紹一款飛睿智能的產品——6公里WiFi圖傳接收模塊,它以其高性能、穩定的傳輸…

【常見的設計模式】單例模式

參考:【設計模式專題之單例模式】1.小明的購物車 【設計模式專題之單例模式】 1.小明的購物車 時間限制:1.000S 空間限制:256MB ? 題目描述 小明去了一家大型商場,拿到了一個購物車,并開始購物。請你設計一個購物車管…

【React】基礎數據回填--useForm與setFieldsValue詳解

相關屬性 1.form 2.setFieldsValue 代碼 import{Form }from"antd";const Publish =

體積大的快遞怎么寄便宜?如何寄件寄包裹更省錢?

大學畢業了,面對即將到來的工作生活,小李不得不把宿舍里的大包小包打包寄回家。可是,當他真正開始打包行李時,才發現這可不是一件簡單的事:衣服、被子、書籍、雜物……這些東西加起來體積不小,想要省錢寄快…