package main import ( "fmt" "github.com/blevesearch/bleve" "github.com/blevesearch/bleve/analysis/analyzer/keyword" _ "github.com/blevesearch/bleve/index/store/gtreap" "strconv" ) func main() { mapping := bleve.NewIndexMapping() fm := bleve.NewTextFieldMapping() fm.Analyzer = keyword.Name dm := bleve.NewDocumentMapping() //dm.DefaultAnalyzer = keyword.Name dm.AddFieldMappingsAt("from", fm) //fmt.Println(dm.Properties["from"].DefaultAnalyzer) mapping.AddDocumentMapping("test", dm) mapping.DefaultType = "test" //tokens, err := mapping.AnalyzeText(keyword.Name, []byte("bleve indexing is easy")) //if err != nil { // panic(err) //} //for _, tk := range tokens { // fmt.Println(string(tk.Term)) //} //return index, err := bleve.NewMemOnly(mapping) //index, err := bleve.NewUsing("", mapping, bleve.Config.DefaultIndexType, "gtreap", map[string]interface{}{}) if err != nil { panic(err) } defer index.Close() for i := 0; i < 10; i ++ { id := "ID_" + strconv.FormatInt(int64(i+1), 10) n := i%5 //fmt.Printf("DocID: %s %d\n", id, n) message := map[string]string{ "id": id, "from": "marty.schoch@gmail.com 哈哈 中国" + strconv.Itoa(n), "body": "bleve indexing is easy", } if err = index.Index(message["id"], message); err != nil { panic(err) } } q := bleve.NewPrefixQuery("id_") //tq := bleve.NewTermQuery("easy") //tq.SetField("body") req := bleve.NewSearchRequest(q) req.Fields = []string{"from", "body"} facetReq := bleve.NewFacetRequest("from", 4) // 种类 req.AddFacet("facet_name", facetReq) result, err := index.Search(req) if err != nil { panic(err) } for _, f := range result.Facets { for _, t := range f.Terms { fmt.Printf("[%s]%d\n", t.Term, t.Count) } } //for _, hit := range result.Hits { // docid, err := index.Document(hit.ID) // if err != nil { // panic(err) // } // fmt.Println(hit.ID, docid.Fields[0].Name(), string(docid.Fields[0].Value())) //} }