Skip to content

More complete example in index mapping documentation #13

@Hendler

Description

@Hendler

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

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions