빠르고 사용하기 쉬운 검색 엔진 - MeiliSearch Search Engine
Meili search 는 Rust 로 작성된 빠르고 사용하기 쉬운 검색엔진입니다.
Rust 의 장점인 따라 별도의 의존성없이 실행 파일 하나만 있으면 되므로 설치와 설정이 매우 간단하며 Elastic Search 와 비교하면 속도가 매우 빠르고 설정이 무지 쉽습니다.
예로 유사어를 등록하려면 elastic search 는 많이 복잡하지만 Meili seach 는 간단하게 등록 가능합니다.
Meili search 는 Open Source 이지만 전용 웹 사이트를 개설하고 다양한 언어용 SDK 를 제공하는 것을 봐서는 안정화되고 많이 확산되면 commercial version 을 내 놓을 것 같습니다.
라이센스를 보니 MIT 인데 amazon 같은 클라우드 사업자가 가져가서 수정하고 소스 공개를 안 하고 자사 서비스로 제공할 경우에 대한 대책이 있는지 궁금해 졌습니다.
당연하지만 Meili search 도 한글 형태소 사전이 탑재되지 않아서 한글 검색 품질은 매우 낮은 한계가 있습니다.
설치와 설정
프로젝트 github 의 release 항목에서 설치할 버전을 클릭하고 OS 에 맞는 패키지를 다운받아서 실행해 주면 됩니다.
$ curl -L -O https://github.com/meilisearch/MeiliSearch/releases/download/v0.24.0/meilisearch-linux-amd64
아무 옵션없이 구동하면 기본 포트 7700 을 사용합니다.
$ ./meilisearch
888b d888 d8b 888 d8b .d8888b. 888
8888b d8888 Y8P 888 Y8P d88P Y88b 888
88888b.d88888 888 Y88b. 888
888Y88888P888 .d88b. 888 888 888 "Y888b. .d88b. 8888b. 888d888 .d8888b 88888b.
888 Y888P 888 d8P Y8b 888 888 888 "Y88b. d8P Y8b "88b 888P" d88P" 888 "88b
888 Y8P 888 88888888 888 888 888 "888 88888888 .d888888 888 888 888 888
888 " 888 Y8b. 888 888 888 Y88b d88P Y8b. 888 888 888 Y88b. 888 888
888 888 "Y8888 888 888 888 "Y8888P" "Y8888 "Y888888 888 "Y8888P 888 888
Database path: "./data.ms"
Server listening on: "http://127.0.0.1:7700"
Environment: "development"
Commit SHA: "7807a8dcffdfc5e8400074eafe451e9aab4c9864"
Build date: "2021-03-30T15:12:32.806848903+00:00"
Package version: "0.24.0"
--http-addr 옵션으로 바인딩할 IP와 포트를 변경해줄 수 있으며 --db-path 옵션으로 index 파일 경로를 수정할 수 있습니다.
./meilisearch --db-path ./meilifiles --http-addr '127.0.0.1:7700'
meili search는 docker 로도 제공하므로 다음 명령어로 실행하면 됩니다.
docker run -p 7700:7700 getmeili/meilisearch:v0.21.0rc1 ./meilisearch
document 생성
샘플 document 생성
Elastic search 처럼 REST API 로 document 를 생성할 수 있습니다.
테스트를 위해 Meili search 에서 기본 제공되는 movie 정보를 다운로드 받습니다.
$ curl -L 'https://bit.ly/2PAcw9l' -o movies.json
다음 명령으로 movies 라는 document 를 생성하고 indexing 할 수 있습니다.
$ curl -i -X POST 'http://127.0.0.1:7700/indexes/movies/documents' \
--header 'content-type: application/json' \
--data-binary @movies.json
검색
생성한 document 에 질의를 하려면 URL 에 document 이름(Ex: movies) 과 search 라는 action name 을 넣고 호출하면 됩니다.
검색 파라미터는 q 에 넣으며 다음은 batman 이라는 이름이 있는 영화 정보를 리턴합니다.
$ curl 'http://127.0.0.1:7700/indexes/movies/search' --data '{ "q": "batman" }' | jq
웹에서 검색
Meili search 는 기본적인 웹 검색 화면도 제공하며 사용하려면 웹 브라우저로 meili search 를 구동한 사이트의 해당 포트(Ex: 7700) 로 연결하면 됩니다.
큰 데이타는 아니지만 19,654 개의 정보가 indexing 되어 있는데 무지 빠르게 검색하는 것을 사용해보면 볼 수 있습니다.