간단한 검색 엔진 구현.
연구 목적은 주로 검색 엔진 제작 방법, 성능 균형 및 구조에 대한 구현 세부 사항을 이해하는 것입니다.
아이디어는 UI에서 데이터베이스 시스템까지 동형 애플리케이션을 만드는 것입니다.
애플리케이션은 docker 또는 github에 릴리스된 바이너리를 사용하여 배포할 수 있습니다.
./searchzin -c <path-to-config>.yml
그런 다음 http://localhost:8080
조사하면 검색 페이지를 볼 수 있습니다.
구성은 기본적으로 /etc/searchzin/config.yml
에 있는 구성 파일을 사용하거나 -C key=value
형식으로 구성 키를 제공하여 수행할 수 있습니다. 두 번째 형식이 첫 번째 형식을 재정의합니다.
구성 기본값:
port : 8080 # Service port
path :
log : /var/log/searchzin # Log directory
data : /var/lib/searchzin # Data directory
모든 프로젝트 구조는 gin
프레임워크를 사용하여 golang으로 만들어졌습니다.
종속성은 dep
사용하여 관리됩니다.
대부분의 프로젝트 툴체인은 Makefile
에 의해 관리되며 중요한 대상은 다음과 같습니다.
install
: 필요한 종속성과 git 후크를 설치합니다.readme
: README.md
파일 포함을 수행합니다.lint
: 코드 린트 및 서식 지정을 수행합니다.test
: 음, 단위 테스트를 컴파일하고 실행합니다.build
: dist
에 linux
배포 가능 폴더를 생성합니다.run
: go run
사용하여 코드를 실행합니다.run-dev
: 도커 컨테이너를 생성하고 실행합니다.release
: 릴리스 Docker 이미지를 생성합니다.publish
: VERSION
파일의 내용을 버전으로 사용하여 dockerhub에 도커 이미지를 게시합니다.publish-latest
: latest
태그를 사용하여 dockerhub에 도커 이미지를 게시합니다.watch
: 파일 수정 시 lint
및 test
수행합니다.func-test
: features
폴더 내에서 기능 테스트를 수행합니다. 이 검색 엔진에는 6가지 주요 구성 요소가 있습니다.
각 구성 요소는 시스템에서 명확한 책임을 갖고 있으며, 모두 함께 협력하여 쿼리 및 문서 색인 요청에 응답합니다.
새로 생성된 문서에 ID를 저장하고 부여하는 역할을 담당합니다. 제약 조건은 다음과 같습니다.
id
를 저장합니다.id
생성을 활성화합니다.ssd
인지 hdd
인지 기본 저장 장치를 인식합니다."용어" 및 문서의 역색인을 저장합니다.
terms
저장합니다.key
조작 전략을 활성화합니다.새 문서가 주어지면 이를 이해하고 인덱스 데이터베이스와 문서 데이터베이스에 모두 저장합니다.
사용자 입력을 구문 분석하고 트리와 같은 데이터 구조를 사용하여 쿼리 계획으로 변환합니다.
lucene
의 DSL과 유사합니다.쿼리 트리가 주어지면 실행될 제한 사항과 환경을 인식하여 최적화합니다.
구조화된 계획을 수립한 후 쿼리는 index
데이터베이스에서 효과적인 데이터를 검색하며, 이 단계는 실행 프로그램에 의해 수행됩니다.
이 쿼리 언어는 설계를 단순화하고 어떤 절충안이 만들어졌는지 이해하기 위해 Lucene에 크게 기반을 두고 있습니다.
사용될 현재 테스트 시나리오는 이름, 콘텐츠 및 태그별로 팟캐스트를 인덱싱하는 것입니다.
기본 사용법은 searchzin-example
에서 확인할 수 있습니다.
searchzin은 MIT 라이센스에 따라 사용할 수 있습니다.