MeiliSearch:简单易用的极速搜索引擎入门指南

9 阅读4分钟

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打造您的极速智能搜索体验!