如何运行属于你的IPFS搜索引擎

2019-05-22 11:38:48

Lens是分布式Web的搜索引擎,是一个开源IPFS工具,允许从IPFS获取内容,并将其编入索引以便日后搜索。目前Lens可以索引以下mime类型:其中的一个要求就是所有数据都存在IPFS上,并且可由正在运行的Lens实例发现。

  Lens是分布式Web的搜索引擎,是一个开源IPFS工具,允许从IPFS获取内容,并将其编入索引以便日后搜索。目前Lens可以索引以下mime类型:其中的一个要求就是所有数据都存在IPFS上,并且可由正在运行的Lens实例发现。将来我们可能会增加对其他分布式网络的支持,例如DAT或SWARM。为了与Lens交互,我们有一个简单但强大的gRPCAPI,支持简单和复杂的查询。

  text/*

  image/*

  application/pdf


  索引如何运行

  我们有几种不同的方法来分析我们将链接在一起的数据。当给定PDF时,我们首先尝试从页面中提取图像和文本。该文本提供给bleve,它能够处理简单和复杂的搜索查询。还使用Tesseract进行光学字符识别以提取可搜索文本,并使用Tensorflow进行图像的基本分类,对图像进行分析。在分析其他mime类型(如image/ *)时,我们尝试执行相同的Tesseract和图像分类分析,就像我们从PDF中提取的图像一样。在分析像text/ *这样的mime类型时,我们直接将文本提供给bleve。   


1.png    


  搜索如何进行

  搜索最起码包括查询,从区块链之类的单个单词,到区块链数据存储之类的搜索短语。我们还支持更复杂的查询,例如针对特定标签,类别,mime类型等进行筛选,但这些查询完全是可选的。

  响应查询的是一个文档数组,其中包含与您的查询匹配的内容的IPFS哈希值,内容的mimetype,以及显示此内容与您的搜索查询的相关性的匹配分数。


  安装Lens


2.png    


  您可以通过几种不同的方式安装镜头,最简单的方法是使用我们预先搭建的Lensdocker镜像。使用docker镜像时,默认设置是启动gRPC服务器监听0.0.0.0:9998,没有任何加密,并使用ghPC身份验证密钥blahblahblah。docker容器还需要连接到IPFSHTTP API,默认值为127.0.0.1:5001。要安装此docker镜像,请运行以下命令dockerpull 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


3.png    


  在我们开始介绍如何使用Lens之前,我们已经发布了现有的Lens索引,如https://temporal.cloud/lens所见,可通过IPFS下载,可以通过CIDQmZqSYDQrtWg4LHnqT6DPqa1XUr7u430aGcyaTiGHJY3SR下载。它的大小为1.2GB,包含各种研究论文,加密白皮书,我已提交,当然也有其他用户提交的文件。

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

  有关我们如何使用这些协议缓冲区构建Temporal中的LensAPI客户端的示例,您可以查看我们的Golang示例:

  package clients

  import (

  "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 server

  type LensClient struct {

  conn *grpc.ClientConn

  pb.LensV2Client

  }

  // NewLensClient is used to generate our lens client

  func 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 string

  if opts.Lens.URL == "" {

  url = defaultURL

  } else {

  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 connection

  func (l *LensClient) Close() { l.conn.Close() }

  实际索引数据,一旦你的gRPC客户端启动并运行,你需要做的只是那个叫做索引的命令,让Lens发挥其魔力!根据内容在网络中的位置,此过程可能需要一段时间。一般来说,如果内容是本地可用的,则索引分析不应超过一分钟,通常为30秒。提交索引数据时,必须提供两个参数,ObjectType,它应使用协议缓冲区中定义的IndexReq_IPLD。第二个参数是ObjectIdentifier,它应该是您要索引的内容的IPFS哈希值。


4.png


  搜索数据也非常简单,并且需要调用搜索命令。唯一必需的参数是Query,它定义了搜索数据的方式。(可选)您可以使用像Hashes这样的过滤器来筛选搜索结果,以便只匹配特定的IPFS哈希值,MimeTypes只匹配特定的mime类型。此命令完成所需的时间取决于多种因素,例如索引的大小,匹配的对象数,索引所在的磁盘速度。


最新推荐