MeiliSearch 是一个开源且非常快速的搜索引擎,专为网站和应用提供智能、高效的搜索体验。它特别适合中小型项目,支持中文等多语言搜索,安装简单,响应速度极快,常见搜索请求延迟低于50毫秒。
MeiliSearch 是什么?
- 快速全文搜索引擎:用户输入时即可实时返回结果(搜索即输入,Search-as-you-type),响应时间通常低于50毫秒。
- 智能容错:支持拼写纠错和错别字容忍,用户输入错误也能找到相关内容。
- 多语言支持:内置中文、日文、希伯来文等多语言分词和处理,无需额外配置。
- 丰富的搜索功能:支持同义词、过滤器、分面搜索(多维度筛选)、地理位置搜索等。
- 灵活定制:可自定义排序规则、字段权重,满足不同业务需求。
- 安全和多租户:通过API密钥控制访问权限,支持多租户环境。
- 易于部署:支持Docker快速部署,也有云端托管服务MeiliSearch Cloud。
MeiliSearch 解决了什么问题?
- 传统搜索引擎安装复杂、资源占用大,响应慢,难以处理拼写错误和多语言。
- MeiliSearch 轻量级,安装简单,适合数据量从几十万到几千万的场景。
- 提供高相关性搜索,支持复杂过滤和排序,满足电商、内容平台、SaaS等多样需求。
- 支持国际化和地理位置搜索,适合全球化产品。
- 通过安全和多租户功能满足企业级应用的管理需求。
MeiliSearch 的典型应用场景
- 电商平台:商品搜索,支持价格、评分、类别等多维度筛选。
- 内容平台:电影、音乐、文章等快速检索和筛选。
- 企业SaaS:CRM联系人、交易记录搜索。
- 多语言网站:支持中文、日文等多语言搜索。
- 基于地理位置的服务:本地服务、地图应用的地理过滤和排序。
- 任何需要快速智能搜索的Web或移动应用。
如何安装和使用 MeiliSearch?
1. 使用 Docker 快速部署
# 拉取最新镜像
docker pull getmeili/meilisearch:latest
# 启动服务,映射端口7700,数据持久化到当前目录meili_data
docker run -itd --rm -p 7700:7700 -v $(pwd)/meili_data:/meili_data getmeili/meilisearch:latest
启动后访问:http://localhost:7700 即可看到MeiliSearch的Web界面。
2. 添加数据示例(Python)
import meilisearch
# 连接本地MeiliSearch服务
client = meilisearch.Client('http://127.0.0.1:7700')
# 创建索引(类似数据库中的表)
index = client.index('movies')
# 添加文档数据
documents = [
{'id': 1, 'title': 'Inception', 'genre': 'Action'},
{'id': 2, 'title': 'Pulp Fiction', 'genre': 'Crime'},
{'id': 3, 'title': 'Back to the Future', 'genre': 'Adventure'}
]
index.add_documents(documents)
# 搜索关键词
result = index.search('Inception')
print(result['hits'])
3. PHP客户端示例
<?php
require_once __DIR__ . '/vendor/autoload.php';
use MeiliSearch\Client;
$client = new Client('http://127.0.0.1:7700');
$index = $client->index('movies');
$documents = [
['id' => 1, 'title' => 'Carol', 'genres' => ['Romance', 'Drama']],
['id' => 2, 'title' => 'Wonder Woman', 'genres' => ['Action', 'Adventure']],
['id' => 3, 'title' => 'Life of Pi', 'genres' => ['Adventure', 'Drama']],
];
$index->addDocuments($documents);
// 基础搜索,支持拼写纠错
$results = $index->search('wondre woman')->getHits();
print_r($results);
?>
MeiliSearch 主要功能详解
功能 | 说明 | 典型应用举例 |
---|---|---|
极速响应 | 50毫秒内返回搜索结果,处理10万条数据平均1.47毫秒 | 用户搜索体验流畅无等待 |
拼写容错 | 自动纠正拼写错误,返回相关结果 | 用户输入错别字也能找到商品 |
同义词支持 | 配置同义词扩展搜索范围 | “扫黑”与“除黑”视为同义 |
多语言支持 | 中文、日文、韩文、英语等多语言分词 | 国际化电商平台支持多语言搜索 |
分面过滤 | 支持多维度筛选,如价格区间、类别、评分 | 电商商品筛选 |
自定义排序 | 根据业务需求调整搜索结果排序 | 按销量、评价、发布时间排序 |
地理位置搜索 | 基于用户位置过滤和排序 | 本地服务、地图应用 |
安全管理 | API密钥权限控制,支持多租户 | 企业多用户权限管理 |
易用部署 | Docker一键部署,支持云端托管 | 快速上线,降低运维成本 |
性能对比
- MeiliSearch处理10万条文档,平均搜索时间约1.47毫秒。
- Elasticsearch处理同样数据,平均搜索时间约44.1毫秒。
- MeiliSearch速度快30倍以上,适合对响应速度要求高的应用。
进阶功能示例:自定义排序和高亮
假设你有一个书店搜索需求,想按出版日期排序并高亮关键词:
import io.github.crew102.meilisearchjava.Client;
import io.github.crew102.meilisearchjava.Index;
import io.github.crew102.meilisearchjava.SearchParams;
public class MeiliSearchDemo {
public static void main(String[] args) {
Client client = new Client("http://localhost:7700", "masterKey");
Index index = client.getIndex("books");
SearchParams params = new SearchParams()
.setSort(Collections.singletonList("published_date"))
.setAttributesToHighlight(Arrays.asList("title", "author"))
.setAttributesToRetrieve(Arrays.asList("title", "author", "published_date"));
var results = index.search("Harry Potter", Book.class, params);
for (var hit : results.getHits()) {
Book book = hit.getResult();
System.out.println(book.getTitle() + " by " + book.getAuthor() + " published on " + book.getPublishedDate());
}
}
}
总结
MeiliSearch 是一个轻量级、极速、易用且功能强大的开源搜索引擎,支持中文等多语言,拥有拼写纠错、同义词、分面过滤、地理位置搜索等丰富功能。它适合中小型项目和对搜索性能要求高的应用,安装简单,响应速度快,开发者可通过RESTful API和多种语言SDK轻松集成。
欢迎尝试使用MeiliSearch打造您的极速智能搜索体验!