【IPFS相关】使用Lens运行「你自己的IPFS搜索引擎」

【IPFS相关】使用Lens运行「你自己的IPFS搜索引擎」

本文由IPFS原力区收集译制,版权所属原作者

【IPFS相关】使用Lens运行「你自己的IPFS搜索引擎」

Lens是我们Temporal umbrella下的另一个开源IPFS工具,它允许IPFS中提取内容,并将其编入索引,以便日后搜索。目前Lens可以索引以下mime类型:

  • 文本/*

  • 图像/*

  • 应用程序/ pdf

 

一个要求是所有数据都存在于IPFS上,并且可以由正在运行的Lens实例发现。在未来,我们可能会增加对其他分布式网络的支持,如DAT或SWARM。为了与Lens交互,我们有一个简单但健壮的gRPC API,它支持简单和复杂的查询。

 

索引是如何工作的

 

我们有几种不同的分析数据的方法,我们将把它们串联起来。当索引pdf文件时,我们首先尝试从页面中提取图像和文本。文本被输入bleve,它能够处理简单和复杂的搜索查询。同时,结合用于光学字符识别的Tesseract和用于图像初步分类的Tensorflow,对图像进行了分析。在分析其他mime类型(如image/*)时,我们尝试执行与从pdf中提取的图像相同的Tesseract和图像分类分析。当分析像text/*这样的mime类型时,我们直接将文本输入bleve。

 

搜索是如何工作的

 

在最基本的级别上进行搜索包括接受查询,范围从单个单词(如区块链)一直到搜索短语(如区块链数据存储)。我们还支持更复杂的查询,比如针对特定标记、类别、mime类型进行过滤,等等,这些都是完全可选的。

 

对查询的响应是一个文档数组,其中包含匹配查询的内容的IPFS散列,及内容的mimetype,以及显示该内容与搜索查询相关性的分数。

 

【IPFS相关】使用Lens运行「你自己的IPFS搜索引擎」

安装Lens

 

有几种不同的方法可以安装镜头,其中最简单的方法是使用我们预先构建的Lens docker映像使用docker映像时,默认设置是启动gRPC服务器监听0.0.0.0:9998,不进行任何加密,并使用blahblahblahgRPC身份验证密钥。docker容器还需要到IPFS HTTP API的连接,缺省值为127.0.0.1:5001。要安装这个docker映像,运行以下命令docker pull rtradetech/lens:latest

 

另外,对于更多那些想要手动设置的人,我们有一个docker-compose设置,它还可以转换所需的IPFS节点。要使用这个docker-compose文件,需要运行以下命令集。它们将使用/tmp目录作为存储所有文件的基本目录。

$> wget -O lens.yml https://raw.githubusercontent.com/RTradeLtd/Lens/master/lens.yml
$> LENS=latest BASE=/tmp docker-compose -f lens.yml up

Lens

 

在开始介绍如何使用Lens之前,我们已经发布了现有的Lens索引https://temporal.cloud/lens

通过IPFS可以通过CID QmZqSYDQrtWg4LHnqT6DPqa1XUr7u4oeaGcyaTiGHJY3SR下载。它的大小为1.2GB,包含各种研究论文、加密白皮书和我提交的文档,以及其他用户提交的文档。

 

所有索引和搜索都可以通过gRPC API完成,为此我们在github上发布了协议缓冲区。使用这些,您可以为Lens构建支持协议缓冲区的任何语言的API !

 

关于我们如何使用这些协议缓冲区来构建临时的Lens API客户端,您可以查看我们下面的Golang示例:

package clientsimport ("fmt""github.com/RTradeLtd/config/v2""github.com/RTradeLtd/grpc/dialer"pb "github.com/RTradeLtd/grpc/lensv2""google.golang.org/grpc""google.golang.org/grpc/credentials")const (defaultURL = "127.0.0.1:9998")// LensClient is a lens client used to make requests to the Lens gRPC servertype LensClient struct {conn *grpc.ClientConnpb.LensV2Client}// NewLensClient is used to generate our lens clientfunc NewLensClient(opts config.Services) (*LensClient, error) {dialOpts := make([]grpc.DialOption, 0)if opts.Lens.TLS.CertPath != "" {creds, err := credentials.NewClientTLSFromFile(opts.Lens.TLS.CertPath, "")if err != nil {return nil, fmt.Errorf("could not load tls cert: %s", err)}dialOpts = append(dialOpts,grpc.WithTransportCredentials(creds),grpc.WithPerRPCCredentials(dialer.NewCredentials(opts.Lens.AuthKey, true)))else {dialOpts = append(dialOpts,grpc.WithInsecure(),grpc.WithPerRPCCredentials(dialer.NewCredentials(opts.Lens.AuthKey, false)))}var url stringif opts.Lens.URL == "" {url = defaultURLelse {url = opts.Lens.URL}conn, err := grpc.Dial(url, dialOpts...)if err != nil {return nil, err}return &LensClient{conn:         conn,LensV2Client: pb.NewLensV2Client(conn),}, nil}// Close shuts down the client's gRPC connectionfunc (l *LensClient) Close() { l.conn.Close() }

要实际索引数据,一旦gRPC客户机启动并运行,所需要做的就是调用index命令,并让Lens发挥它的魔力根据内容在网络中的位置,这个过程可能会花费一些时间。一般来说,如果内容是本地可用的,那么索引分析不会花费超过一分钟,通常是30秒。在为索引提交数据时,必须提供两个参数ObjectType,它应该使用协议缓冲区中定义的IndexReq_IPLDas。第二个参数是ObjectIdentifier,它应该是希望索引的内容的IPFS散列。

 

搜索数据也非常简单,需要调用Search命令。唯一需要的参数是Query,它定义了如何搜索数据。还可以选择性地过滤出的搜索结果,甚至更多的过滤器,如哈希表只匹配特定的IPFS哈希表,MimeTypes只匹配特定的mime类型。完成此命令所需的时间取决于多种因素,比如索引的大小、匹配对象的数量、索引所在磁盘的速度。

 

感谢,并向所有为IPFS做出贡献的人以及许多不同项目所做的所有伟大工作欢呼!

作者:RTrade

本文由IPFS中国社区编译,原文链接:https://medium.com/@rtradetech/run-your-own-ipfs-search-engine-with-lens-c262fd9e5cc

【IPFS相关】使用Lens运行「你自己的IPFS搜索引擎」

IPFS原力区

Slogan:让存储更安全、更高效、更开放、更经济
价值观:价值 共建 共享 荣耀

总部位于上海,聚集基于分布式网络&存储的众多技术大咖和爱好者,深耕基于 IPFS 的商业生态建设和社区发展。
每周二举办“分布式存储网络”主题沙龙,聚集了众多技术大咖和 IPFS 爱好者,通过持续输出全面、精细、优质的 IPFS 咨询和技术支持,将生态中的爱好者转化为 IPFS支持者和参与者,共建 IPFS 生态的健康发展。

【IPFS相关】使用Lens运行「你自己的IPFS搜索引擎」

 【IPFS相关】使用Lens运行「你自己的IPFS搜索引擎」 阅读原文,周二活动快速了解

本文由 Ipfs币 作者:ipfs币 发表,其版权均为 Ipfs币 所有,文章内容系作者个人观点,不代表 Ipfs币 对观点赞同或支持。如需转载,请注明文章来源。
39

发表评论