func BlevePIndexImplInitRouter(r *mux.Router, phase string) { if phase == "static.before" { // Handlers from bleve/http/mapping need earlier precedence. bleveHttpMappingStatic := http.FileServer(bleveHttpMapping.AssetFS()) r.PathPrefix("/static/partials/analysis").Handler( http.StripPrefix("/static/", bleveHttpMappingStatic)) r.PathPrefix("/static/partials/mapping").Handler( http.StripPrefix("/static/", bleveHttpMappingStatic)) r.PathPrefix("/static/js/mapping").Handler( http.StripPrefix("/static/", bleveHttpMappingStatic)) bleveHttpMapping.RegisterHandlers(r, "/api") } if phase == "manager.after" { // Using standard bleveHttp handlers for /api/pindex-bleve endpoints. // listIndexesHandler := bleveHttp.NewListIndexesHandler() r.Handle("/api/pindex-bleve", listIndexesHandler).Methods("GET") getIndexHandler := bleveHttp.NewGetIndexHandler() getIndexHandler.IndexNameLookup = rest.PIndexNameLookup r.Handle("/api/pindex-bleve/{pindexName}", getIndexHandler).Methods("GET") docCountHandler := bleveHttp.NewDocCountHandler("") docCountHandler.IndexNameLookup = rest.PIndexNameLookup r.Handle("/api/pindex-bleve/{pindexName}/count", docCountHandler).Methods("GET") searchHandler := bleveHttp.NewSearchHandler("") searchHandler.IndexNameLookup = rest.PIndexNameLookup r.Handle("/api/pindex-bleve/{pindexName}/query", searchHandler).Methods("POST") docGetHandler := bleveHttp.NewDocGetHandler("") docGetHandler.IndexNameLookup = rest.PIndexNameLookup docGetHandler.DocIDLookup = rest.DocIDLookup r.Handle("/api/pindex-bleve/{pindexName}/doc/{docID}", docGetHandler).Methods("GET") debugDocHandler := bleveHttp.NewDebugDocumentHandler("") debugDocHandler.IndexNameLookup = rest.PIndexNameLookup debugDocHandler.DocIDLookup = rest.DocIDLookup r.Handle("/api/pindex-bleve/{pindexName}/docDebug/{docID}", debugDocHandler).Methods("GET") listFieldsHandler := bleveHttp.NewListFieldsHandler("") listFieldsHandler.IndexNameLookup = rest.PIndexNameLookup r.Handle("/api/pindex-bleve/{pindexName}/fields", listFieldsHandler).Methods("GET") } }
func main() { flag.Parse() // walk the data dir and register index names dirEntries, err := ioutil.ReadDir(*dataDir) if err != nil { log.Fatalf("error reading data dir: %v", err) } expvars.Set("indexes", bleveHttp.IndexStats()) for _, dirInfo := range dirEntries { indexPath := *dataDir + string(os.PathSeparator) + dirInfo.Name() // skip single files in data dir since a valid index is a directory that // contains multiple files if !dirInfo.IsDir() { log.Printf("not registering %s, skipping", indexPath) continue } i, err := bleve.Open(indexPath) if err != nil { log.Printf("error opening index %s: %v", indexPath, err) } else { log.Printf("registered index: %s", dirInfo.Name()) bleveHttp.RegisterIndexName(dirInfo.Name(), i) } } router := mux.NewRouter() router.StrictSlash(true) // first install handlers from bleve/http/mapping, for precedence bleveHttpMappingStatic := http.FileServer(bleveHttpMapping.AssetFS()) staticPathDev := *staticPath + "../../bleve/http/mapping/mapping_static/" fi, err := os.Stat(staticPathDev) if err == nil && fi.IsDir() { log.Printf("using dev static resources from %s", staticPathDev) bleveHttpMappingStatic = http.FileServer(http.Dir(staticPathDev)) } router.PathPrefix("/static/partials/analysis").Handler( http.StripPrefix("/static/", bleveHttpMappingStatic)) router.PathPrefix("/static/partials/mapping").Handler( http.StripPrefix("/static/", bleveHttpMappingStatic)) router.PathPrefix("/static/js/mapping").Handler( http.StripPrefix("/static/", bleveHttpMappingStatic)) bleveHttpMapping.RegisterHandlers(router, "/api") // next, install our static file handlers staticFileRouter(router) // add the API createIndexHandler := bleveHttp.NewCreateIndexHandler(*dataDir) createIndexHandler.IndexNameLookup = indexNameLookup router.Handle("/api/{indexName}", createIndexHandler).Methods("PUT") getIndexHandler := bleveHttp.NewGetIndexHandler() getIndexHandler.IndexNameLookup = indexNameLookup router.Handle("/api/{indexName}", getIndexHandler).Methods("GET") deleteIndexHandler := bleveHttp.NewDeleteIndexHandler(*dataDir) deleteIndexHandler.IndexNameLookup = indexNameLookup router.Handle("/api/{indexName}", deleteIndexHandler).Methods("DELETE") listIndexesHandler := bleveHttp.NewListIndexesHandler() router.Handle("/api", listIndexesHandler).Methods("GET") docIndexHandler := bleveHttp.NewDocIndexHandler("") docIndexHandler.IndexNameLookup = indexNameLookup docIndexHandler.DocIDLookup = docIDLookup router.Handle("/api/{indexName}/{docID}", docIndexHandler).Methods("PUT") docCountHandler := bleveHttp.NewDocCountHandler("") docCountHandler.IndexNameLookup = indexNameLookup router.Handle("/api/{indexName}/_count", docCountHandler).Methods("GET") docGetHandler := bleveHttp.NewDocGetHandler("") docGetHandler.IndexNameLookup = indexNameLookup docGetHandler.DocIDLookup = docIDLookup router.Handle("/api/{indexName}/{docID}", docGetHandler).Methods("GET") docDeleteHandler := bleveHttp.NewDocDeleteHandler("") docDeleteHandler.IndexNameLookup = indexNameLookup docDeleteHandler.DocIDLookup = docIDLookup router.Handle("/api/{indexName}/{docID}", docDeleteHandler).Methods("DELETE") searchHandler := bleveHttp.NewSearchHandler("") searchHandler.IndexNameLookup = indexNameLookup router.Handle("/api/{indexName}/_search", searchHandler).Methods("POST") listFieldsHandler := bleveHttp.NewListFieldsHandler("") listFieldsHandler.IndexNameLookup = indexNameLookup router.Handle("/api/{indexName}/_fields", listFieldsHandler).Methods("GET") debugHandler := bleveHttp.NewDebugDocumentHandler("") debugHandler.IndexNameLookup = indexNameLookup debugHandler.DocIDLookup = docIDLookup router.Handle("/api/{indexName}/{docID}/_debug", debugHandler).Methods("GET") aliasHandler := bleveHttp.NewAliasHandler() router.Handle("/api/_aliases", aliasHandler).Methods("POST") // start the HTTP server http.Handle("/", router) log.Printf("Listening on %v", *bindAddr) log.Fatal(http.ListenAndServe(*bindAddr, nil)) }