# README
go-binocular
Some sort of in-memory, record-level inverted index 🤷
Example
Using a Binocular
instance:
package main
import (
"fmt"
"github.com/mycreepy/go-binocular"
)
func main() {
b := binocular.New()
b.AddWithID("Always look on the bright side of life", "123")
b.AddWithID("Houston we have a problem", "456")
result, err := b.Search("life", binocular.DefaultIndex)
if err != nil {
panic(err)
}
fmt.Println(result.Refs()) // ["123"]
data, err := result.Collect()
if err != nil {
panic(err)
}
fmt.Println(data) // ["Always look on the bright side of life"]
}
Just using a standalone Index
:
package main
import (
"fmt"
"github.com/mycreepy/go-binocular"
)
func main() {
index := binocular.NewIndex()
index.Add("Always look on the bright side of life", "123")
index.Add("Houston we have a problem", "456")
result := index.Search("life", 0)
fmt.Println(result) // ["123"]
}
Benchmarks
go test -v -bench=. -run=^$
goos: linux
goarch: amd64
pkg: github.com/mycreepy/go-binocular
cpu: Intel(R) Core(TM) i7-6820HQ CPU @ 2.70GHz
BenchmarkIndex
BenchmarkIndex/basic
BenchmarkIndex/basic-8 526098 2530 ns/op
BenchmarkIndex/short_sentence
BenchmarkIndex/short_sentence-8 2106877 578.6 ns/op
BenchmarkIndex/stemming
BenchmarkIndex/stemming-8 25466 45394 ns/op
BenchmarkIndex/index_stop_words
BenchmarkIndex/index_stop_words-8 494758 2308 ns/op
BenchmarkIndex/index_short_words
BenchmarkIndex/index_short_words-8 468702 2550 ns/op
BenchmarkIndex/all
BenchmarkIndex/all-8 28339 44917 ns/op
BenchmarkSearch
BenchmarkSearch/basic
BenchmarkSearch/basic-8 22643508 48.56 ns/op
BenchmarkSearch/stemming
BenchmarkSearch/stemming-8 315206 4089 ns/op
BenchmarkFuzzySearch
BenchmarkFuzzySearch/basic
BenchmarkFuzzySearch/basic-8 42 39916250 ns/op
BenchmarkFuzzySearch/stemming
BenchmarkFuzzySearch/stemming-8 100 17308908 ns/op
BenchmarkRemove
BenchmarkRemove/index_size_1e+6
BenchmarkRemove/index_size_1e+6-8 3 421132080 ns/op
BenchmarkRemove/index_size_1e+5
BenchmarkRemove/index_size_1e+5-8 28 45965739 ns/op
BenchmarkRemove/index_size_1e+4
BenchmarkRemove/index_size_1e+4-8 204 5386136 ns/op
BenchmarkRemove/index_size_1e+3
BenchmarkRemove/index_size_1e+3-8 3774 314521 ns/op
PASS
ok github.com/mycreepy/go-binocular 423.974s
# Functions
New will create a new Binocular instance with the given Options.
NewIndex creates a new Index with the given Options.
WithDefaultIndex creates a new default Index with the given name and IndexOptions.
WithIndex creates a new Index with the given name and IndexOptions.
WithShortWords enables indexing of short words.
WithStemming enables word stemming when reading and writing data to the Index.
WithStopWords enables indexing of stop words.
# Constants
DefaultIndex is the default Index when adding data to a Binocular.
# Variables
ErrIndexNotFound indicates that the given index does not exist.
ErrRefNotFound indicates that the given reference does not exist.
# Structs
Binocular holds you data and can use multiple Indices for searching it.
Index is a thread-safe inverted index.
SearchResult holds the resulting references of your search.
# Type aliases
IndexOption alters the indexing behavior of an Index.
Option can alter the behavior if a Binocular instance.