【问题标题】:Getting started with Bleve using BoltDB使用 BoltDB 开始使用 Bleve
【发布时间】:2016-01-24 06:55:07
【问题描述】:

我正在尝试围绕 Bleve 展开思考,并且我了解教程、视频和文档中的所有内容。然而,当我在 BoltDB 上使用它时,我感到非常困惑,不知道如何开始。

假设我有一个名为 data.db 的现有 BoltDB 数据库,其中填充了结构类型 Person 的值

type Person struct {
   ID int          `json:"id"`             
   Name string     `json:"name"` 
   Age int         `json:"age"`
   Sex string      `json:"sex"`
}

如何索引这些数据以便进行搜索?如何处理将来存储在数据库中的数据的索引?

我们将不胜感激任何帮助。

【问题讨论】:

  • Bleve 似乎使用 BoltDB 来存储自己的索引(而不是从现有的 Bolt 数据库构建它们):godoc.org/github.com/blevesearch/bleve/index/store/boltdb
  • 进一步:您正在使用 BoltDB 构建什么?它是一个出色的 KV 存储,用于存储身份验证会话、令牌等,但不适合临时查询或全文搜索。

标签: go boltdb bleve


【解决方案1】:

Bleve 使用 BoltDB 作为多个后端存储之一,并且与您存储应用程序数据的位置是分开的。要在 Bleve 中索引您的数据,只需添加您的 Index

index.Index(person.ID, person)

index 与您的应用程序数据分开存在(无论是在 Bolt、Postgres 等中)。

要检索您的数据,您需要使用bleve.NewSearchRequest() 构造一个搜索请求,然后调用Index.Search()。这将返回一个SearchResult,其中包括一个Hits 字段,您可以在其中检索对象的ID。您可以使用它在应用程序数据存储中查找对象。

免责声明:我是 BoltDB 的作者。

【讨论】:

  • 感谢您的回复。从文档中,我确实了解如何对数据进行索引以及如何进行搜索。然而,我仍然不明白 BoltDB 的实际数据是如何在这里使用的。
  • Bleve 使用 BoltDB 存储来存储自己的索引数据的内部格式。最好将 Bleve 视为一个黑匣子。除了通过 Bleve API 之外,您的 BoltDB 存储不会与之交互。
【解决方案2】:

如何索引数据取决于您要如何查询它。

如果您想通过任意字段进行查询,例如 {Age:15, Name:"Bob"},那么 BoltDB 不适合您的问题。

BoltDB 只是一个键值存储,可以快速访问顺序键和高效的前缀查找。它并不能真正替代通用数据库。

您可能需要更像文档存储(即:MongoDB)或 RDBMS(即:PostgreSQL)的东西。

如果您只想要使用简单文件并嵌入的东西,您也可以使用SQliteGo module

如果您只想按单个字段(例如 ID 或名称)进行搜索,则使用它作为键。

如果查找速度根本不重要,我想您可以使用 Bolt 来遍历整个数据库,解析 json 并检查字段。但这可能是您可以采取的最糟糕的方法。

【讨论】:

  • 我发现当与搜索索引配对时,Bolt 作为应用程序数据存储非常有用。对于许多应用程序,数据检索通过主键或全文搜索进行。键/值存储在主键搜索方面表现出色,您的 FTE 索引在全文搜索方面表现出色。
  • 嗨。谢谢你的回复。然而它并没有回答我的问题:(
  • 是的,你们都是对的。我没有真正深入到这个话题上。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-08
  • 2015-08-15
  • 1970-01-01
相关资源
最近更新 更多