在现代搜索引擎中,向量化搜索逐渐成为提升搜索质量和体验的关键技术,尤其是在处理自然语言处理(NLP)任务时。
本文介绍如何通过 Meilisearch 和 本地Ollama 的结合,搭建一个本地化的向量化搜索系统。
Meilisearch 是一个强大且易用的开源搜索引擎。首先,我们通过 Docker 来部署 Meilisearch。
Docker Compose 配置:
version: '3'services:meilisearch:container_name: meilisearchimage: getmeili/meilisearch:v1.8environment:- http_proxy- https_proxy- MEILI_MASTER_KEY=${MEILI_MASTER_KEY:-<key>}- MEILI_NO_ANALYTICS=${MEILI_NO_ANALYTICS:-true}- MEILI_ENV=${MEILI_ENV:-development}- MEILI_LOG_LEVEL- MEILI_DB_PATH=${MEILI_DB_PATH:-/meili_data/data.ms}ports:- ${MEILI_PORT:-7700}:7700networks:- meilisearchvolumes:- ./meili_data:/meili_datarestart: unless-stoppednetworks:meilisearch:driver: bridge配置文件:
MEILI_MASTER_KEY=<key>MEILI_NO_ANALYTICS=trueMEILI_ENV=developmentMEILI_LOG_LEVEL=infoMEILI_DB_PATH=./data.msMEILI_PORT=77002. 部署 Ollama 向量化模型Ollama 提供了一个强大的嵌入向量模型库 nomic-embed-text,我们可以通过其 API 实现文本的向量化。
Ollama 服务配置:
/etc/systemd/system/ollama.service开放外部访问配置:
/etc/systemd/system/ollama.service.d/override.conf[Service]Environment="OLLAMA_HOST=0.0.0.0"完成配置后,执行以下命令重启 Ollama:
systemctl daemon-reloadsystemctl restart ollama3. 测试 Ollama 向量模型可以通过 curl 命令测试 Ollama 的嵌入服务是否正常运行:
curl http://localhost:11434/api/embeddings -d '{ "model": "nomic-embed-text", "prompt": "The sky is blue because of Rayleigh scattering"}'如果 Ollama 运行在 Docker 容器内,也可以通过宿主机地址进行访问测试:
curl http://host.docker.internal:11434/api/embeddings -d '{ "model": "nomic-embed-text", "prompt": "The sky is blue because of Rayleigh scattering"}'启用 Meilisearch 向量化搜索功能为了在 Meilisearch 中启用向量化搜索功能,我们需要激活其实验性功能 /experimental-features。
激活向量搜索:
curl -X PATCH '<url>/experimental-features/' \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer <key>' \ --data-binary '{ "vectorStore": true }'配置 Ollama 嵌入服务在 Meilisearch 中配置 Ollama 嵌入服务,实现文本向量化和搜索:
curl -X PATCH '<url>/indexes/posts/settings' \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer <key>' \ --data-binary '{ "embedders": { "default": { "source": "ollama", "url": "http://<url>:11434/api/embeddings", "model": "nomic-embed-text", "documentTemplate": "The document titled {{doc.title}} contains: {{doc.summary|truncatewords: 20}}" } } }'查询任务状态可以通过以下命令查看任务的运行状态:
curl -X GET 'http://localhost:7700/tasks/845' \ -H 'Authorization: Bearer <key>'自动进行向量查询一旦所有配置完成,我们可以开始进行实际的向量化搜索。以下是一个向量化搜索的例子:
curl -X POST -H 'content-type: application/json' \ -H 'Authorization: Bearer <key>' \'<url>/indexes/posts/search' \ --data-binary '{ "q": "Cloudflare tunnel MAc 本地设置隧道指南", "hybrid": { "semanticRatio": 0.1 "embedder": "default" } }'总结通过 Meilisearch 和 Ollama 的结合,我们可以轻松实现一个本地化的向量化搜索系统。Meilisearch 作为高效的开源搜索引擎,再结合 Ollama 提供的强大嵌入模型服务,可以为开发者提供丰富且精准的搜索体验。