Начало работы с Bleve с использованием BoltDB

Я пытаюсь обернуть голову вокруг Bleve, и я понимаю все, что происходит в учебниках, видео и документации. Однако я очень запутался, когда использую его на BoltDB, и не знаю, с чего начать.

Скажем, у меня есть база данных BoltDB, которая называется data.db заполняется значениями типа структуры Person

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

Как мне проиндексировать эти данные, чтобы я мог выполнить поиск? Как мне справиться с индексацией данных, которые будут храниться в базе данных в будущем?

Любая помощь будет высоко оценена.

2 ответа

Решение

Bleve использует BoltDB в качестве одного из нескольких внутренних хранилищ и отличается от того, где вы храните данные своего приложения. Чтобы проиндексировать ваши данные в Bleve, просто добавьте Index:

index.Index(person.ID, person)

Тот index существует отдельно от данных вашего приложения (будь то в Bolt, Postgres и т. д.).

Чтобы получить ваши данные, вам нужно создать поисковый запрос, используя bleve.NewSearchRequest()затем позвоните Index.Search(), Это вернет SearchResult который включает в себя Hits поле, где вы можете получить ID для вашего объекта. Вы можете использовать это для поиска объекта в хранилище данных вашего приложения.

Отказ от ответственности: я автор BoltDB.

То, как вы индексируете свои данные, зависит от того, как вы хотите запросить их.

Если вы хотите выполнять запрос по любым произвольным полям, например {Age:15, Name:"Bob"}, то BoltDB не подходит для вашей проблемы.

BoltDB - это просто хранилище значений ключей с быстрым доступом к последовательным ключам и эффективным поиском префиксов. Это не совсем замена для баз данных общего пользования.

Вы, вероятно, хотите что-то более похожее на хранилище документов (например, MongoDB) или RDBMS (например, PostgreSQL).

Если вы просто хотели что-то, что использует простые файлы и встроено, вы также можете использовать SQlite с модулем Go

Если вы хотите выполнять поиск только по одному полю, например, по идентификатору или имени, используйте его в качестве ключа.

Если скорость поиска не имеет значения вообще, я думаю, вы можете использовать Bolt, чтобы просто выполнить итерацию по всей базе данных, проанализировать json и проверить поля. Но это, вероятно, худший подход, который вы могли бы использовать.

Другие вопросы по тегам