搜索引擎优化 知乎(傻瓜一词借鉴自傻瓜相机,又称轻便相机、全自动相机(组图))
优采云 发布时间: 2021-08-28 02:15搜索引擎优化 知乎(傻瓜一词借鉴自傻瓜相机,又称轻便相机、全自动相机(组图))
傻瓜一词来源于傻瓜相机,也称为*敏*感*词*相机和全自动相机,通常是指为普通人设计的易于操作的小型全自动相机。
在 HelloGitHub 上查找有趣的入门级开源项目。大家好。我是郝丹说到开源搜索引擎,首先想到的应该是大名鼎鼎的ElasticSearch,但是ES对于个人项目来说有点重。
今天给大家带来一款人人都能用的轻量级开源傻瓜搜索引擎——MeiliSearch
/meilisearch/meilisearch
在介绍MeiliSearch的功能之前,我想谈谈我是如何发现它并喜欢它的。
我的要求不高
我开发的HelloGitHub小程序:支持关键字搜索以往月刊中的开源项目。
小程序的搜索功能是用Rust编写的开源搜索引擎Sonic。搜索速度虽然快,但在使用过程中发现:
这些问题直接影响了搜索体验,让我在看搜索相关知识的同时,也在寻找新的开源解决方案的时候非常困扰。想找一个:
简单的部署+配置,支持中文分词,搜索速度快,轻量级开源搜索引擎项目。
俗称:傻瓜中文搜索引擎。
它有一个美丽的名字
它有一个“meili”名称“MeiliSearch”。它也是一个用 Rust 编写的开源搜索引擎。它支持:
概述特点:搜索速度快,全文搜索,支持汉字,安装维护方便,这不是我要找的:傻瓜中文搜索引擎吗?
我已经很想尝试了,就不多说了!
简单的开始
终于在纸上浅了,所以我必须尝试一下效果。
1、安装并启动
Linux 和 Mac OS 的一键安装和启动命令:
curl -L https://install.meilisearch.com | sh
./meilisearch
这个安装够傻吗?启动成功如下图所示:
用浏览器访问::7700/,可以看到美力搜索提供的网页搜索页面。我提前写了一些数据来演示搜索:
2、基本操作
MeiliSearch是一个搜索服务,提供RESTful API通信协议比较通用,官方提供了多种编程语言客户端:
以下演示将以Python代码为例,安装Python SDK:
# 要求 Python3.6+
pip3/pip install meilisearch
使用Python实现连接、写入、查询、删除等基本操作:
import meilisearch
client = meilisearch.Client('http://127.0.0.1:7700', 'masterKey') # masterKey 是密码
# index 相当于数据库的表
index = client.index('books')
# 准备写入搜索的数据
documents = [
{ 'book_id': 123, 'title': 'Pride and Prejudice' },
{ 'book_id': 456, 'title': 'Le Petit Prince' },
{ 'book_id': 1, 'title': 'Alice In Wonderland' },
{ 'book_id': 1344, 'title': 'The Hobbit' },
{ 'book_id': 4, 'title': 'Harry Potter and the Half-Blood Prince' },
{ 'book_id': 42, 'title': 'The Hitchhiker\'s Guide to the Galaxy' }
]
# 删:清空指定 index
index.delete_all_documents()
# 写:
result = index.add_documents(documents)
# 该引擎会根据写入数据 ID 做替换或者新增的操作
# 写入后并不代表搜索引擎处理完成,可以查看返回 updateId 的状态
index.get_update_status(result.get('updateId'))
# enqueued, processed or failed 三种状态(processed 代表完成)
# 查:
index.search('harry pottre')
# 结果:
# 包含丰富的字段
"""
{
// 命中的结果
"hits" => [{
"book_id" => 4,
"title" => "Harry Potter and the Half-Blood Prince"
}],
// 页
"offset" => 0,
// 每页条数
"limit" => 20,
// 处理耗时
"processingTimeMs" => 1,
// 查询的内容
"query" => "harry pottre"
}
"""
到此,搜索的最基本功能已经实现,但探索并不止于此。
3、优化搜索性能
美丽搜索可以通过配置规则来改善搜索结果:
可以使用Python客户端更新MeiliSearch配置,示例代码:
# 停用词
client.index('movies').update_settings({
'stopWords': [
'the',
'a',
'an'
],
})
# 排序规则
client.index('movies').update_ranking_rules([
"typo",
"words",
"proximity",
"attribute",
"wordsPosition",
"exactness",
"asc(publish_time)",
"desc(watch)"
])
# 查看 stop words
client.index('movies').get_stop_words()
# 重置设置
# index.reset_settings()
# 除了搜索其它操作都是异步,会直接返回一个 updateId 需要通过 ID 查询处理状态
# wait_for_pending_update 可阻塞等待处理结果
这些设置可以有效提高搜索效果。例如,在使用停用词之前,搜索“开源书籍”不会命中“开源书籍”。添加停用词可以命中,因为匹配停用词(无用词)时会忽略输入内容。
说一下我遇到的一个坑,我测试搜索效果的时候发现:go找不到,但是golang可以搜索。查了半天,终于发现是因为go在上面的停用词词典里
另外,与sonic相比,功能上没有词联想(suggest),可以通过创建index+searchableAttributes来实现。
我没有找到同义词集合。如果你有现成的汉英同义词词典,请留言告诉我~谢谢
4、部署
MeiliSearch 部署非常简单,只需在系统中添加 systemd 服务即可。
cat /etc/systemd/system/meilisearch.service
[Unit]
Description=MeiliSearch
After=systemd-user-sessions.service
[Service]
Type=simple
ExecStart=/usr/bin/meilisearch --http-addr 127.0.0.1:7700 --env production --master-key xxxxxx
[Install]
WantedBy=default.target
EOF
# Set the service meilisearch
systemctl enable meilisearch
# Start the meilisearch service
systemctl start meilisearch
# Verify that the service is actually running
systemctl status meilisearch
但是,在部署正式环境时,需要注意以下几点:
生产环境必须设置密码,开发环境不强制。生产环境的网页将被关闭,无法进行远程访问和权限控制。可以使用Nginx实现IP白名单+Cerbot实现HTTPS,为了提高安全性,可以通过curl地址查看服务状态
以上是我使用MeiliSearch的一些经验,以及给我的整体感受:
一个命令可以启动搜索服务,一行代码实现搜索功能。有了它,我的搜索新手可以分分钟实现一个搜索服务,舒服~
爱的结晶(实战)
我使用MeiliSearch重写了HelloGitHub小程序的搜索功能,以及后端使用的FastAPI框架。此外,还添加了一些新功能:
热搜词项目详情页项目镜像地址提高访问速度新界面
HelloGitHub小程序第二版如下:
新增以下方案:信息流、评论、评分、用户系统、积分系统,因为我只开发,所以进度会很慢...但我不会半途而废
终于
如果MeiliSearch存在不足,我认为搜索准确度有待提高。一方面需要学习一些分词和NLP的知识,另一方面需要熟悉它的API和原理,然后找一些词典辅助,应该可以提高准确率,但是你热豆腐不能慢慢吃。
最后希望这篇文章的分享对大家有所帮助,今天的文章就到这里了。如果你也想分享玩开源项目的经验,欢迎原创文章投稿给我。
优秀的开源项目就像散落在沙滩上的优采云,需要人们去寻找。
HelloGitHub 是 shell 选择器,随便找一个开源项目到 HelloGitHub!