2016-01-24 7 views
1

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

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

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

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

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

+0

BLEVE, как представляется, использовать BoltDB хранить свои собственные индексы (а не создавать их из существующей базы данных Bolt): https://godoc.org/github.com/blevesearch/bleve/index/store/boltdb – elithrar

+0

Далее: что вы строите с помощью BoltDB? Это отличный магазин KV для таких вещей, как сеансы аутентификации, токены и т. Д., Но не подходит для специальных запросов или полнотекстового поиска. – elithrar

ответ

5

Bleve использует BoltDB как один из нескольких бэкэнд-магазинов и отдельно от того, где вы храните свои данные приложения. Для того, чтобы индексировать данные в BLEVE, просто добавить свой Index:

index.Index(person.ID, person)

Это index существует отдельно от данных приложений (будь то в Болт, Postgres и т.д.).

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

Отказ от ответственности: Я являюсь автором BoltDB.

+0

Спасибо за ваш ответ. Я понимаю, из документации, как данные индексируется и как выполняется поиск. Однако я все еще не понимаю, как используются фактические данные из BoltDB. – Mardwan

+1

Bleve использует хранилище BoltDB для собственного внутреннего формата индексированных данных. Лучше подумать о Bleve как о черный ящик. Ваш магазин BoltDB не взаимодействует с ним, кроме как через API Bleve. –

1

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

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

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

Возможно, вам захочется что-то большее, чем хранилище документов (то есть: MongoDB) или СУБД (то есть: PostgreSQL).

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

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

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

+0

Я считаю, что Bolt отлично работает как хранилище данных приложения, когда он сопряжен с индексом поиска. Для многих приложений поиск данных происходит либо через первичный ключ, либо в полнотекстовый поиск.Хранилища ключей/значений отлично справляются с поиском первичного ключа, и ваш индекс FTE отлично подходит для полнотекстового поиска. –

+0

Привет. Спасибо, что ответили. Тем не менее, он не отвечает на мой вопрос :( – Mardwan

+0

Да, оба y'all правы. Я действительно недостаточно разбирался в этой теме. –