func main() { flag.Parse() expvars.Set("indexes", bleveHttp.IndexStats()) // open the index tpbIndex, err := bleve.Open(*indexPath) if err == bleve.ErrorIndexPathDoesNotExist { log.Printf("Creating new index...") // create a mapping indexMapping := buildIndexMapping() // use the mapping tpbIndex, err = bleve.New(*indexPath, indexMapping) if err != nil { log.Fatal(err) } // index data in the background go func() { err = indexTPB(tpbIndex) if err != nil { log.Fatal(err) } }() } else if err != nil { log.Fatal(err) } else { log.Printf("Opening existing index...") } // create a router to serve static files router := staticFileRouter() // add the API bleveHttp.RegisterIndexName("tpb", tpbIndex) listIndexesHandler := bleveHttp.NewListIndexesHandler() router.Handle("/api", listIndexesHandler).Methods("GET") getIndexHandler := bleveHttp.NewGetIndexHandler() getIndexHandler.IndexNameLookup = indexNameLookup router.Handle("/api/tpb", getIndexHandler).Methods("GET") searchHandler := bleveHttp.NewSearchHandler("tpb") router.Handle("/api/search", searchHandler).Methods("POST") listFieldsHandler := bleveHttp.NewListFieldsHandler("tpb") router.Handle("/api/fields", listFieldsHandler).Methods("GET") docCountHandler := bleveHttp.NewDocCountHandler("tpb") router.Handle("/api/count", docCountHandler).Methods("GET") docGetHandler := bleveHttp.NewDocGetHandler("tpb") docGetHandler.DocIDLookup = docIDLookup router.Handle("/api/tpb/{docID}", docGetHandler).Methods("GET") debugHandler := bleveHttp.NewDebugDocumentHandler("tpb") debugHandler.DocIDLookup = docIDLookup router.Handle("/api/tpb/{docID}/_debug", debugHandler).Methods("GET") aliasHandler := bleveHttp.NewAliasHandler() router.Handle("/api/_aliases", aliasHandler).Methods("POST") // start the HTTP server http.Handle("/", router) bind = fmt.Sprintf("%s:%d", *host, *port) log.Printf("Listening on http://%v", bind) log.Fatal(http.ListenAndServe(bind, nil)) }
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) } 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) // set correct name in stats i.SetName(dirInfo.Name()) } } router := mux.NewRouter() router.StrictSlash(true) 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 log.Printf("listening on :%s\n", *port) http.Handle("/", router) log.Fatal(http.ListenAndServe(":"+*port, nil)) }
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)) }