Typesense 搜索引擎部署教程
Typesense 是一款开源的即时搜索引擎,以其极低的搜索延迟、简洁的 API 和出色的开发者体验而受到欢迎。与 Meilisearch 类似,Typesense 也专注于提供开箱即用的搜索体验,但它还支持高可用集群部署和地理位置搜索。本文将在搬瓦工 VPS 上部署 Typesense 并演示核心功能。
一、安装 Typesense
1.1 APT 安装
curl -sL https://dl.typesense.org/releases/27.0/typesense-server-27.0-amd64.deb -o typesense.deb
dpkg -i typesense.deb
1.2 Docker 安装
docker run -d --name typesense -p 8108:8108 -v typesense_data:/data --restart unless-stopped typesense/typesense:27.0 --data-dir /data --api-key=TypesenseKey123! --enable-cors
二、配置与启动
mkdir -p /data/typesense
# 启动 Typesense
typesense-server --data-dir=/data/typesense --api-key=TypesenseKey123! --listen-port=8108 --enable-cors &
创建 systemd 服务文件 /etc/systemd/system/typesense.service:
[Unit]
Description=Typesense Server
After=network.target
[Service]
Type=simple
ExecStart=/usr/bin/typesense-server --data-dir=/data/typesense --api-key=TypesenseKey123! --listen-port=8108 --enable-cors
Restart=on-failure
[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl enable typesense
systemctl start typesense
三、创建集合(Collection)
curl 'http://localhost:8108/collections' -X POST -H 'X-TYPESENSE-API-KEY: TypesenseKey123!' -H 'Content-Type: application/json' -d '{
"name": "products",
"fields": [
{"name": "name", "type": "string"},
{"name": "description", "type": "string"},
{"name": "price", "type": "float"},
{"name": "category", "type": "string", "facet": true},
{"name": "brand", "type": "string", "facet": true},
{"name": "rating", "type": "float"},
{"name": "in_stock", "type": "bool"},
{"name": "created_at", "type": "int64"}
],
"default_sorting_field": "rating"
}'
四、索引文档
# 单条索引
curl 'http://localhost:8108/collections/products/documents' -X POST -H 'X-TYPESENSE-API-KEY: TypesenseKey123!' -H 'Content-Type: application/json' -d '{
"name": "ThinkPad X1 Carbon",
"description": "轻薄商务笔记本电脑 14英寸 i7处理器 16GB内存",
"price": 9999.0,
"category": "笔记本",
"brand": "Lenovo",
"rating": 4.8,
"in_stock": true,
"created_at": 1709251200
}'
# 批量导入(JSONL 格式)
curl 'http://localhost:8108/collections/products/documents/import?action=create' -X POST -H 'X-TYPESENSE-API-KEY: TypesenseKey123!' -H 'Content-Type: text/plain' -d '{"name":"MacBook Air M3","description":"苹果轻薄笔记本","price":8999.0,"category":"笔记本","brand":"Apple","rating":4.9,"in_stock":true,"created_at":1709251200}
{"name":"iPhone 15 Pro","description":"苹果旗舰手机 A17 Pro芯片","price":7999.0,"category":"手机","brand":"Apple","rating":4.7,"in_stock":true,"created_at":1709251200}'
五、搜索查询
# 基础搜索
curl 'http://localhost:8108/collections/products/documents/search?q=笔记本&query_by=name,description' -H 'X-TYPESENSE-API-KEY: TypesenseKey123!'
# 带过滤和分面的搜索
curl 'http://localhost:8108/collections/products/documents/search' -H 'X-TYPESENSE-API-KEY: TypesenseKey123!' -G -d 'q=笔记本' -d 'query_by=name,description' -d 'filter_by=price:>5000 && category:笔记本' -d 'sort_by=price:asc' -d 'facet_by=category,brand' -d 'highlight_full_fields=name,description' -d 'per_page=10'
六、同义词和策展
# 添加同义词
curl 'http://localhost:8108/collections/products/synonyms/laptop-synonyms' -X PUT -H 'X-TYPESENSE-API-KEY: TypesenseKey123!' -H 'Content-Type: application/json' -d '{"synonyms": ["笔记本", "laptop", "notebook", "便携电脑"]}'
# 搜索策展(指定查询结果)
curl 'http://localhost:8108/collections/products/overrides/promote-thinkpad' -X PUT -H 'X-TYPESENSE-API-KEY: TypesenseKey123!' -H 'Content-Type: application/json' -d '{
"rule": { "query": "商务笔记本", "match": "contains" },
"includes": [{ "id": "1", "position": 1 }]
}'
七、高可用集群
# 节点 1
typesense-server --data-dir=/data/typesense --api-key=TypesenseKey123! --listen-port=8108 --peering-port=8107 --nodes=/etc/typesense/nodes
# /etc/typesense/nodes 文件内容
192.168.1.10:8107:8108
192.168.1.20:8107:8108
192.168.1.30:8107:8108
Typesense 使用 Raft 一致性协议,至少 3 个节点可以容忍 1 个节点故障。
八、API 密钥管理
# 创建只读搜索密钥
curl 'http://localhost:8108/keys' -X POST -H 'X-TYPESENSE-API-KEY: TypesenseKey123!' -H 'Content-Type: application/json' -d '{
"description": "Search-only key",
"actions": ["documents:search"],
"collections": ["products"]
}'
九、Typesense vs Meilisearch vs Elasticsearch
- 集群支持:Typesense 原生支持高可用集群,Meilisearch 目前仅单节点。
- 地理搜索:Typesense 内置地理位置搜索,Meilisearch 也支持。
- 性能:三者在小数据集上差异不大,Elasticsearch 在大数据集上优势明显。
- 资源占用:Typesense 和 Meilisearch 都很轻量,Elasticsearch 需要更多内存。
总结
Typesense 是一个功能丰富的轻量级搜索引擎,特别适合需要高可用集群和地理搜索的中小型应用。在搬瓦工 VPS 上部署简单,资源占用低。更多搜索引擎教程可参考 Meilisearch 和 Elasticsearch。选购搬瓦工 VPS 请查看 全部方案,使用优惠码 NODESEEK2026 享受 6.77% 折扣,通过 bwh81.net 进入官网。