Начало работы с 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 и проверить поля. Но это, вероятно, худший подход, который вы могли бы использовать.