-
Notifications
You must be signed in to change notification settings - Fork 16
Open
Description
summary
As a new Bleve user, I'm looking for ways to programmatically map complex structs. I'd misunderstood some basic setup given the documentation.
working example
Ok, here's a mapping example that I got from learned from beersearch
mapping := bleve.NewIndexMapping()
docMapping := bleve.NewDocumentMapping()
mapping.AddDocumentMapping("A", docMapping)
mapping1 := bleve.NewTextFieldMapping()
mapping1.Store = true
docMapping.AddFieldMappingsAt("Name", mapping1)
mapping2 := bleve.NewTextFieldMapping()
mapping2.Store = true
docMapping.AddFieldMappingsAt("Description", mapping2)
mapping3 := bleve.NewTextFieldMapping()
mapping3.Store = true
docMapping.AddFieldMappingsAt("TypeField", mapping3)
mapping.TypeField = "TypeField"
mapping.DefaultAnalyzer = "en"
indexname := "test.bleve"
os.RemoveAll("./" + indexname)
index, err := bleve.New(indexname, mapping)
if err != nil {
fmt.Println(err)
return
}
text := "This is amazing text"
searchtext := "Name:amazing"
data := struct {
Name string
Description string
TypeField string
}{
Name: text,
Description: "",
TypeField: "A",
}
data2 := struct {
Name string
Description string
TypeField string
}{
Name: "",
Description: text,
TypeField: "A",
}
// index some data
index.Index("ida", data)
index.Index("idb", data2)
// search for some text
// query := bleve.NewMatchQuery(searchtext)
query := bleve.NewQueryStringQuery(searchtext)
search := bleve.NewSearchRequest(query)
searchResults, err := index.Search(search)
if err != nil {
t.Error(err)
fmt.Println(err)
return
}
hitcount := len(searchResults.Hits)
if hitcount != 1 {
fmt.Println(searchResults.String())
t.Errorf("should only return 1 instead returned %d", hitcount)
} There does appear to be good examples of using JSON configs - e.g. I'm looking at a cli gist and a mapping test and seeing JSON used for mapping configuration, while http://www.blevesearch.com/docs/Index-Mapping/ is the programatic version I'd like to follow.
t would also be nice to extend the above to use subdocument mapping
(example below not working yet)
Given a struct with nested structs that have been mapped into subdocuments with AddSubDocumentMapping is there a syntax for querying? e.g.
type Candy struct {
Name string
}
type Kid struct {
Name string
FavoriteCandy Candy
}
candy := bleve.NewDocumentMapping()
...
kid := bleve.NewDocumentMapping()
...
kid.AddSubDocumentMapping("FavoriteCandy", candy)
// create some data and index
// e.g. I didn't know that TypeField is lowercased
searchtext := "+favoritecandy.candy.name:watermelon"
query := bleve.NewMatchQuery(searchtext)Metadata
Metadata
Assignees
Labels
No labels