시도해보십시오!
Blogsearch는 외부 서비스가없는 검색 엔진을 가능하게하는 블로깅 도구입니다.
이것은 docsearch와 같지만 블로그를위한 것입니다.
보다 기술적으로 Blogsearch는 WebAssembly로 컴파일 된 SQLITE로 구동되는 정적 웹 사이트를위한 순수한 클라이언트 측면의 전체 텍스트 검색 엔진입니다.
순전히 클라이언트 측 검색
유지할 서버가 없습니다. 서비스 비용 없음.
쉬운. 블로그와 정적 웹 사이트를 염두에두고 제작되었습니다.
인기있는 블로그 프레임 워크를 지원합니다.
Jekyll
개츠비
휴고
… 그리고 모든 정적 웹 사이트!
sqlite-wasm : 웹에서 sqlite를 webassembly를 사용하여 실행합니다. 이 프로젝트는 Blogsearch의 요구를 위해 만들어졌습니다.
워크 플로는 두 단계로 구성됩니다. 1. 인덱스 파일 | |
1. 인덱스 파일을 작성하십시오 | 2. 검색을 활성화합니다 |
색인 파일
그런 다음 생성 된 | 웹 페이지에 블로그 검색 엔진을로드해야합니다. 사용 가능한 엔진은 하나뿐입니다.
<cript> 태그 또는 JavaScript 파일을 사용하여 엔진을로드하십시오. 엔진이 |
프로젝트 전체에서 "Index"및 "Database"라는 용어는 종종 혼합되지만 대부분의 경우 동일한 sqlite .db.wasm 파일을 의미합니다. |
Jekyll (Jekyll-Blogsearch)
개츠비 (Gatsby-Plugin-Blogsearch)
휴고 (블로그 검색-크롤러)
일반 크롤러 (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,
},
} | |
인덱스 빌딩 도구에는 필드에 대한 도구 별 옵션 (예 : Blogsearch-Crawler의 parser 옵션)이 있습니다. 자세한 내용은 인덱스 빌딩 도구의 문서를 참조하십시오. |
< 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의 하위 디렉토리로 이동하십시오.
검색 엔진은 기본적으로 FTS5 확장 기능이있는 SQLITE이며 WebAssembly에 컴파일됩니다. SQLITE FTS5는 검색 기능에 대한 내장 BM25 순위 알고리즘을 제공합니다. SQLITE는 가장 휴대용 데이터베이스 엔진이므로 웹에서 SQLITE 데이터베이스 파일을 열 수도 있습니다! SQLITE 덕분에 다양한 프로그래밍 언어로 몇 가지 SQL 쿼리로 Blogsearch 용 플러그인을 쉽게 쓸 수 있습니다.
.db.wasm 이 권장 파일 확장자 인덱스 인 이유는 무엇입니까? WebAssembly 이진 파일이 아닙니다. 왜 .db 가 아닌가? .db 를 만들려고했지만 큰 문제가 있습니다. 인덱스 파일은 웹 서버에서 gzip 압축이 아닙니다. 인기있는 블로그 웹 서비스 (특히 github 페이지)는 일반적으로 .db 파일을 application/octet-stream 으로 제공하며 파일을 압축하지 않습니다. WebAssembly 바이너리 파일 .wasm 이라는 거짓말을 통해 서버는이를 application/wasm 으로 인식하고 압축 한 배송합니다.
파일 크기를 크게 줄이기 때문에 압축이 중요합니다. 크기가 1/3까지 줄어드는 것을 보았습니다.
"하지만 내 컴퓨터에서 작동"문제를 피하려면 작업을 구축하는 데 Docker를 사용하는 것이 좋습니다.
이 저장소는 각 하위 프로젝트에 자체 빌드 스크립트가있는 Monorepo이지만 루트 디렉토리에서 작업을 쉽게 실행할 수 있습니다.
| 특정 하위 프로젝트 만 빌드하려면 하위 디렉토리로 이동하여 실을 실행하십시오. |
필요한 도구는 다음과 같습니다.
GNU Make (v4.2 이상이 권장됩니다. MacOS 사용자에게 경고를받습니다!)
도커
Docker-compose
방사
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에서 IT를 상환합니다.
그 외에 프로젝트는 MIT 라이센스입니다. 라이센스를 참조하십시오