Categorygithub.com/mycreepy/go-binocular
modulepackage
0.6.0
Repository: https://github.com/mycreepy/go-binocular.git
Documentation: pkg.go.dev

# README

Go Reference Go Report Card

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.