ลองดูสิ
BlogSearch เป็นเครื่องมือบล็อกที่เปิดใช้งานเครื่องมือค้นหาโดยไม่มีบริการภายนอกใด ๆ
นี่เป็นเหมือน docsearch แต่สำหรับบล็อก
ในทางเทคนิคแล้ว BlogSearch เป็นเครื่องมือค้นหาแบบเต็มไคลเอ็นต์ที่บริสุทธิ์สำหรับเว็บไซต์แบบคงที่ขับเคลื่อนโดย SQLite ที่รวบรวมไว้ใน WebAssembly
การค้นหาฝั่งไคลเอ็นต์ล้วนๆ
ไม่มีเซิร์ฟเวอร์ที่จะรักษา ไม่มีค่าบริการ
ง่าย. มันถูกสร้างขึ้นสำหรับบล็อกและเว็บไซต์คงที่
รองรับกรอบบล็อกยอดนิยม:
Jekyll
คนขี้เกียจ
Hugo
…และเว็บไซต์คงที่ใด ๆ !
SQLITE-WASS: เรียกใช้ SQLITE บนเว็บโดยใช้ WebAssembly โครงการนี้ทำขึ้นเพื่อความต้องการของ BlogSearch
เวิร์กโฟลว์ประกอบด้วยสองขั้นตอน: 1 คุณสร้างไฟล์ดัชนี | |
1. สร้างไฟล์ดัชนี | 2. เปิดใช้งานการค้นหา |
ไฟล์ดัชนี
จากนั้นคุณคัดลอก | หน้าเว็บของคุณควรโหลดเอ็นจิ้นบล็อก มีเครื่องยนต์เพียงเครื่องเดียวเท่านั้น:
โหลดเอ็นจิ้นโดยใช้แท็ก <Script> หรือในไฟล์ JavaScript เมื่อเครื่องยนต์ดึงไฟล์ |
ตลอดโครงการคำว่า "ดัชนี" และ "ฐานข้อมูล" มักจะผสมกัน แต่พวกเขาหมายถึงไฟล์ sqlite .db.wasm เดียวกันในกรณีส่วนใหญ่ |
Jekyll (Jekyll-Blogsearch)
Gatsby (Gatsby-Plugin-Blogsearch)
Hugo (BlogSearch-Crawler)
Crawler ทั่วไป (BlogSearch-Crawler)
ผู้ใช้ควรกำหนดค่าเครื่องมือสร้างดัชนีเพื่อรวบรวมค่าของฟิลด์เพื่อทำงานเครื่องมือค้นหาอย่างถูกต้อง
เครื่องมือสร้างดัชนีควรรวบรวมฟิลด์เริ่มต้นต่อไปนี้สำหรับแต่ละโพสต์:
title : ชื่อเรื่องของโพสต์
body : เนื้อหาของโพสต์
url : ลิงก์ URL ไปยังโพสต์
categories : รายการที่คั่นด้วยเครื่องหมายจุลภาค ( , ) ของหมวดหมู่ที่โพสต์เป็นของ
tags : รายการแท็กที่คั่น , เครื่องหมายจุลภาคที่โพสต์มี
ผู้ใช้สามารถกำหนดค่าทุกฟิลด์โดยใช้คุณสมบัติต่อไปนี้:
| ตัวอย่าง | ผลลัพธ์ |
|---|---|
| |
{
...other field options...
categories: {
+ disabled: true,
},
} | |
ในตัวอย่างต่อไปนี้ขนาดของไฟล์ดัชนี | |
{
...other field options...
body: {
+ hasContent: false,
},
} | |
| |
{
...other field options...
url: {
+ indexed: false,
},
} | |
เครื่องมือการสร้างดัชนีของคุณอาจมีตัวเลือกเฉพาะเครื่องมือสำหรับฟิลด์ (เช่นตัวเลือก parser สำหรับ BlogSearch-Crawler) ดูเอกสารประกอบของเครื่องมือสร้างดัชนีของคุณสำหรับรายละเอียด |
< link rel =" stylesheet " href =" https://cdn.jsdelivr.net/npm/[email protected]/dist/basic.css " />
< script src =" https://cdn.jsdelivr.net/npm/[email protected]/dist/blogsearch.umd.js " > </ script >
< script src =" https://cdn.jsdelivr.net/npm/[email protected]/dist/worker.umd.js " > </ script >
< input id =" blogsearch_input_element " type =" search " placeholder =" Search Text " class =" form-control " />
< script >
blogsearch ( {
dbPath : 'your_index_file.db.wasm' ,
inputSelector : '#blogsearch_input_element' ,
} ) ;
</ script >สำหรับรายละเอียดและตัวเลือกเพิ่มเติมให้ไปที่ไดเรกทอรีย่อยของ BlogSearch
เครื่องมือค้นหาโดยทั่วไปคือ SQLite พร้อมส่วนขยาย FTS5 ซึ่งรวบรวมไว้ใน WebAssembly SQLITE FTS5 นำเสนออัลกอริทึมการจัดอันดับ BM25 ในตัวสำหรับฟังก์ชั่นการค้นหา เนื่องจาก SQLite เป็นเอ็นจิ้นฐานข้อมูลแบบพกพามากที่สุดคุณสามารถเปิดไฟล์ฐานข้อมูล SQLite บนเว็บได้เช่นกัน! ต้องขอบคุณ SQLite เราสามารถเขียนปลั๊กอินสำหรับ BlogSearch ได้อย่างง่ายดายด้วยการสืบค้น SQL เพียงไม่กี่ในภาษาการเขียนโปรแกรมที่แตกต่างกัน
.db.wasm แนะนำดัชนีส่วนขยายไฟล์? ไม่ใช่ไฟล์ไบนารี WebAssembly ทำไมไม่เพียงแค่ .db ? ฉันพยายามทำให้มัน .db แต่มีปัญหาใหญ่: ไฟล์ดัชนีไม่ได้ถูกบีบอัด GZIP โดยเว็บเซิร์ฟเวอร์ บริการเว็บบล็อกยอดนิยม (โดยเฉพาะหน้า gitHub) มักจะให้บริการไฟล์ .db เป็น application/octet-stream และไม่บีบอัดไฟล์ ด้วยการโกหกว่ามันเป็นไฟล์ไบนารี webasply .wasm เซิร์ฟเวอร์รับรู้ว่าเป็น application/wasm และจัดส่งที่บีบอัด
การบีบอัดมีความสำคัญเนื่องจากลดขนาดไฟล์อย่างมีนัยสำคัญ ฉันเห็นขนาดลดลงสูงสุด 1/3
เพื่อหลีกเลี่ยงปัญหา“ แต่ใช้งานได้กับเครื่องของฉัน” ขอแนะนำอย่างยิ่งให้ใช้ Docker สำหรับการสร้างงาน
แม้ว่าที่เก็บนี้เป็น monorepo ที่แต่ละโครงการย่อยมีสคริปต์บิลด์ของตัวเองคุณสามารถเรียกใช้งานในไดเรกทอรีรากได้อย่างง่ายดาย
| หากคุณต้องการสร้างโครงการย่อยเฉพาะเท่านั้นให้ไปที่ไดเรกทอรีย่อยและเรียกใช้คำสั่งเส้นด้าย |
เครื่องมือที่จำเป็นมีดังต่อไปนี้:
แนะนำ GNU (v4.2 หรือสูงกว่าได้รับการเตือนสำหรับผู้ใช้ MacOS!)
นักเทียบท่า
นักเทียบท่า
เส้นด้าย
แม้ว่ามันจะเป็นโครงการ JS MakeFile เพราะมันมีการกำหนดค่ามากขึ้นและรองรับการสร้างแบบขนาน
สำหรับรุ่น NodeJS เฉพาะที่ใช้ในโครงการโปรดดูที่ DockerFile
# Or yarn install, without docker
make install-in-docker # Or yarn install, without docker
make lib-in-dockermake start-in-docker
# You can access the demo page via 0.0.0.0:9000 # Or make test, without docker
make test-in-docker
# Run it in parallel
make test-in-docker -j4 --output-sync=target| จะใช้เวลามาก! (~ 30 mintues) |
# It is highly recommended to use docker here
make examples-in-docker && make demo-in-docker| จะใช้เวลามาก! (~ 30 mintues) |
# Or make all, without docker
make all-in-docker
# Or
# Parallel builds. This reduces the build time almost an half on my machine.
make all-in-docker -j4 --output-sync=targetmake clean
# Then run any commands above make bash-in-dockerโครงการนี้ได้รับแรงบันดาลใจจาก DocSearch และมีการปรับแต่งใหม่เป็น TypeScript
นอกเหนือจากนั้นโครงการคือใบอนุญาต MIT ดูใบอนุญาต