痛点
虽然elasticsearch足够灵活强大、扩展性和实时性也较好。但是对于中小型项目来说,elasticsearch还是显得有些庞大,对硬件设备的要求也较高。那么,在要求不是很高的情况下,我们可以考虑另一种搜索引擎方案:meilisearch。
meilisearch是一个功能强大、快速、开源、易于使用和部署的搜索引擎,并且meilisearch的搜索和索引都是高度可定制的,提供开箱即用的功能属性,如错字容忍、过滤器和同义词。而最重要的一点是,它【支持中文搜索】,而不需要添加额外的配置。
特性
它具有以下特点:
- 快速: meilisearch旨在提供快速的搜索速度。使用meilisearch,用户可以在毫秒级别内获取查询结果,即使在大数据集上也是如此。
- 精度高: meilisearch采用先进的算法来确保搜索结果的准确性。它支持拼写修正、同义词替换、近义词搜索等功能,这些功能可以大大提高搜索结果的质量。
- 可定制性强: meilisearch具有灵活的api,可以轻松集成到任何应用程序中。它还支持自定义排名、字段权重和搜索范围等功能。
- 易于使用: meilisearch的安装和设置过程非常简单,并且它提供了易于使用的web界面和cli工具,使用户可以轻松管理和监控搜索引擎。
快速
在官方网站上提供了一些性能比较数据和基准测试结果,这些测试结果显示meilisearch在处理大型数据集时速度非常快,可以在毫秒级别内返回查询结果。
例如,在官方提供的基准测试中,使用meilisearch
处理10
万个文档时,平均搜索时间为1.47
毫秒,而使用elasticsearch
搜索同样的数据集时,平均搜索时间为44.1
毫秒。这表明,meilisearch
在速度方面比其他一些搜索引擎更快,并且可以在大规模数据集上实现高效搜索。
高精度搜索
meilisearch的第二个特点是高精度搜索。为了实现这个特点,meilisearch使用了多种算法和技术,包括:
- 拼写纠正:当用户拼写单词错误时,meilisearch可以自动检测并纠正拼写错误,从而提供更准确的搜索结果。
- 同义词替换:meilisearch支持同义词替换,当用户输入一个词时,搜索引擎会将其替换为相关的同义词,从而扩展搜索范围并提供更准确的搜索结果。
- 近义词搜索:meilisearch还支持近义词搜索,当用户输入一个词时,搜索引擎会在索引中查找相关的近义词,并将它们包含在搜索结果中。
除了上述功能,meilisearch还支持模糊搜索、停用词过滤、基于短语和前缀的搜索等多种功能,这些功能可以大大提高搜索结果的质量和准确性。总之,meilisearch通过多种算法和技术来提高搜索结果的准确性和质量,使其成为一种高精度的搜索引擎。
可定制性强
meilisearch的第三个特点是可定制性强。它提供了灵活的api,使开发人员可以根据自己的需求自定义搜索引擎的各种功能和特性,包括:
- 自定义排名:开发人员可以根据自己的需求自定义搜索结果的排名方式,以确保最相关的结果在搜索结果列表中排名靠前。
- 字段权重:开发人员可以指定搜索引擎在搜索过程中应该优先考虑哪些字段,以提高搜索结果的准确性。
- 搜索范围:开发人员可以限制搜索的范围,例如只搜索特定的字段或文档类型,以提高搜索结果的质量。
以下是一些示例:
假设我们有一个在线书店,我们想要实现一种搜索功能,可以搜索书名、作者、出版社等字段,并且希望搜索结果按照出版日期的先后顺序排列。我们可以使用meilisearch的api来实现这个功能,例如:
import io.github.crew102.meilisearchjava.client;
import io.github.crew102.meilisearchjava.index;
public class meilisearchdemo {
public static void main(string[] args) {
// create a meilisearch client object
client client = new client("http://localhost:7700", "masterkey");
// get an index
index index = client.getindex("books");
// define search parameters
searchparams params = new searchparams()
.setsort(collections.singletonlist("published_date"))
.setattributestohighlight(arrays.aslist("title", "author", "publisher"))
.setattributestoretrieve(arrays.aslist("title", "author", "publisher", "published_date"));
// perform search
searchresults<book> results = index.search("harry potter", book.class, params);
// print search results
for (searchresult<book> hit : results.gethits()) {
book book = hit.getresult();
system.out.println(book.gettitle() + " by " + book.getauthor() + " published by " + book.getpublisher() + " on " + book.getpublisheddate());
}
}
}
在上面的示例中,我们首先创建了一个meilisearch客户端对象,然后定义了一些搜索参数,例如按照出版日期排序、高亮显示标题、作者和出版商等。接下来,我们使用meilisearch的search方法来执行搜索,并遍历搜索结果以打印出书名、作者、出版社和出版日期等信息。
支持多语言搜索
meilisearch的第五个特点是支持多语言搜索。这意味着meilisearch能够搜索多种语言的文本,并且可以正确处理每种语言的语法和语义。这种功能对于需要支持全球用户的应用程序非常有用,例如国际化的电子商务平台、跨语言的新闻网站等。
meilisearch支持的语言非常多,包括但不限于英语、中文、日语、韩语、法语、德语、西班牙语、意大利语、荷兰语、葡萄牙语、俄语、阿拉伯语、希伯来语等等。meilisearch能够支持如此多种语言的搜索,主要得益于其内置的各种语言处理工具,例如分词器、词干提取器、同义词扩展器、语义分析器等等。
部署安装
环境:ubuntu
部署方式:docker
编排工具:dockercompose
配置信息:
version: '3'
services:
meilisearch:
image: getmeili/meilisearch:latest
container_name: meilisearch
restart: always
environment:
meili_http_addr: 0.0.0.0:7700
# meili_master_key: meilisearchmasterkey
ports:
- 7700:7700
volumes:
- meilisearch_data:/data.ms
volumes:
meilisearch_data:
- 执行安装命令
docker-compose -f meilisearch_compose.yaml stop docker-compose
- 下载测试数据
测试数据地址:https://docs.meilisearch.com/movies.json
- 导入测试数据
curl -x post 'http://localhost:7700/indexes/movies/documents?primarykey=id' -h 'content-type: application/json' --data-binary @movies.json
总结
总的来说,对于数据量不是很大的中小型企业来说(几百万到几千万的数据),都可以使用 meilisearch 搜索引擎。同时,它的使用场景基本可以覆盖当前主流的平台和技术,如管理后台搜索、小程序搜索等场景中。是一款真正轻量级安装部署、搜索速度快到极致,名副其实的轻量级且美丽搜索引擎
发表评论