Я новичок в Go и Bleve (извините, если я спрашиваю тривиальные вещи ...).Эта поисковая система, кажется, действительно хороша, но я застреваю, когда дело касается моих результатов поиска.
Допустим, у нас есть структура:
type Person struct {
Name string `json:"name"`
Bio string `json:"bio"`
}
Теперь мы извлекаемданные из базы данных (используя sqlx lib):
rows := []Person{}
db.Select(&rows, "SELECT * FROM person")
... и индексируйте их:
index.Index, err = bleve.Open("index.bleve")
batch := index.Index.NewBatch()
i := 0
for _, row := range rows {
rowId := fmt.Sprintf("%T_%d", row, row.ID)
batch.Index(rowId, row)
i++
if i > 100 {
index.Index.Batch(batch)
i = 0
}
}
Теперь у нас есть созданный индекс.Он отлично работает.
Используя утилиту командной строки bleve , он возвращает данные правильно:
bleve query index.bleve doe
3 matches, showing 1 through 3, took 27.767838ms
1. Person_68402 (0.252219)
Name
Doe
Bio
My name is John Doe!
2. ...
Здесь мы видим, что bleve сохранил Name
и Bio
fields.
Теперь я хочу сделать это, чтобы получить к нему доступ из своего кода!
query := bleve.NewMatchAllQuery()
searchRequest := bleve.NewSearchRequest(query)
searchResults, _ := index.Index.Search(searchRequest)
fmt.Println(searchResults[0].ID) // <- This works
Но я не только хочу идентификатор и затем запрашиваю базу данных, чтобы получить остальную частьДата.Чтобы избежать попадания в базу данных , я хотел бы иметь возможность сделать что-то вроде:
fmt.Println(searchResults[0].Bio) // <- This doesn't work :(
Не могли бы вы помочь?