To perform searches, obtain a reader from your writer using writer.Reader(). Construct a query (e.g., bluge.NewMatchQuery("term").SetField("field_name")) and wrap it in a search request using bluge.NewTopNSearch(n, query). You can enable standard aggregations with .WithStandardAggregations().
Execute the search with reader.Search(ctx, request), which returns a documentMatchIterator. Iterate through matches using documentMatchIterator.Next() and access stored fields using match.VisitStoredFields(func(field string, value []byte) bool { ... }).
reader, err := writer.Reader()
if err != nil {
log.Fatalf("error getting index reader: %v", err)
}
defer reader.Close()
query := bluge.NewMatchQuery("bluge").SetField("name")
request := bluge.NewTopNSearch(10, query).
WithStandardAggregations()
documentMatchIterator, err := reader.Search(context.Background(), request)
if err != nil {
log.Fatalf("error executing search: %v", err)
}
match, err := documentMatchIterator.Next()
for err == nil && match != nil {
err = match.VisitStoredFields(func(field string, value []byte) bool {
if field == "_id" {
fmt.Printf("match: %s\n", string(value))
}
return true
})
if err != nil {
log.Fatalf("error loading stored fields: %v", err)
}
match, err = documentMatchIterator.Next()
}
if err != nil {
log.Fatalf("error iterator document matches: %v", err)
}