Skip to content

Instantly share code, notes, and snippets.

@michaeljs1990
Created July 17, 2020 05:26
Show Gist options
  • Star 5 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save michaeljs1990/25f9949c10ab64d971422dda44feea0e to your computer and use it in GitHub Desktop.
Save michaeljs1990/25f9949c10ab64d971422dda44feea0e to your computer and use it in GitHub Desktop.
Bleve _source example
package main
import (
"bytes"
"encoding/gob"
"fmt"
"github.com/blevesearch/bleve"
"github.com/blevesearch/bleve/document"
"github.com/blevesearch/bleve/index/scorch"
)
type Outer struct {
Name string
Inner Inner
}
type Inner struct {
Name string
Test string
}
func main() {
// open a new index
m := bleve.NewIndexMapping()
// t := bleve.NewTextFieldMapping()
// articleMapping := bleve.NewDocumentMapping()
// articleMapping.AddFieldMappingsAt("_source", t)
// m.DefaultMapping = articleMapping
index, err := bleve.NewUsing("lily.bleve", m, scorch.Name, scorch.Name, nil)
if err != nil {
fmt.Println("can't make new", err)
return
}
data := Outer{
Name: "1",
Inner: Inner{
Name: "test",
Test: "tee",
},
}
doc := document.Document{
ID: "U123",
}
err = m.MapDocument(&doc, data)
if err != nil {
fmt.Println(err)
return
}
var mess bytes.Buffer
enc := gob.NewEncoder(&mess)
enc.Encode(data)
fmt.Println(mess.Bytes())
field := document.NewTextFieldWithIndexingOptions(
"_source", nil, mess.Bytes(), document.StoreField)
nd := doc.AddField(field)
batch := index.NewBatch()
batch.IndexAdvanced(nd)
err = index.Batch(batch)
if err != nil {
fmt.Println(err)
return
}
query := bleve.NewQueryStringQuery("Name:1")
search := bleve.NewSearchRequest(query)
search.Fields = []string{"_source"}
searchResults, err := index.Search(search)
if err != nil {
fmt.Println(err)
return
}
for _, x := range searchResults.Hits {
b, ok := x.Fields["_source"]
if !ok {
fmt.Println("failed", b)
return
}
messout := bytes.NewBuffer([]byte(fmt.Sprintf("%v", b)))
dec := gob.NewDecoder(messout)
var outer Outer
err = dec.Decode(&outer)
if err != nil {
fmt.Println(err)
return
}
fmt.Printf("%+v\n", outer)
}
fmt.Println(searchResults)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment