搜索引擎优化 知乎(傻瓜一词借鉴自傻瓜相机,又称轻便相机、全自动相机(组图))

优采云 发布时间: 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!

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线