https://github.com/blugelabs/bluge
indexing library for Go
https://github.com/blugelabs/bluge
Last synced: 9 days ago
JSON representation
indexing library for Go
- Host: GitHub
- URL: https://github.com/blugelabs/bluge
- Owner: blugelabs
- License: apache-2.0
- Created: 2020-08-30T02:20:00.000Z (over 4 years ago)
- Default Branch: master
- Last Pushed: 2024-05-11T08:12:04.000Z (12 months ago)
- Last Synced: 2025-04-24T08:37:47.271Z (10 days ago)
- Language: Go
- Size: 590 KB
- Stars: 1,958
- Watchers: 31
- Forks: 125
- Open Issues: 65
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
- Authors: AUTHORS
Awesome Lists containing this project
- go-awesome - Bluge - Text segmentation (Open source library / Search Recommendations)
README
#  Bluge
[](https://pkg.go.dev/github.com/blugelabs/bluge)
[](https://github.com/blugelabs/bluge/actions?query=workflow%3ATests+event%3Apush+branch%3Amaster)
[](https://github.com/blugelabs/bluge/actions?query=workflow%3ALint+event%3Apush+branch%3Amaster)modern text indexing in go - [blugelabs.com](https://www.blugelabs.com/)
## Features
* Supported field types:
* Text, Numeric, Date, Geo Point
* Supported query types:
* Term, Phrase, Match, Match Phrase, Prefix
* Conjunction, Disjunction, Boolean
* Numeric Range, Date Range
* BM25 Similarity/Scoring with pluggable interfaces
* Search result match highlighting
* Extendable Aggregations:
* Bucketing
* Terms
* Numeric Range
* Date Range
* Metrics
* Min/Max/Count/Sum
* Avg/Weighted Avg
* Cardinality Estimation ([HyperLogLog++](https://github.com/axiomhq/hyperloglog))
* Quantile Approximation ([T-Digest](https://github.com/caio/go-tdigest))## Indexing
```go
config := bluge.DefaultConfig(path)
writer, err := bluge.OpenWriter(config)
if err != nil {
log.Fatalf("error opening writer: %v", err)
}
defer writer.Close()doc := bluge.NewDocument("example").
AddField(bluge.NewTextField("name", "bluge"))err = writer.Update(doc.ID(), doc)
if err != nil {
log.Fatalf("error updating document: %v", err)
}
```## Querying
```go
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)
}
```## Repobeats

## License
Apache License Version 2.0