github.com/aarzilli/tools@v0.0.0-20151123112009-0d27094f75e0/appengine/fulltext/fulltext_search.go (about) 1 // Package fulltext is just an 2 // exercise in Google fulltext API. 3 // 4 package fulltext 5 6 import ( 7 "net/http" 8 "time" 9 10 "appengine" 11 "appengine/search" 12 13 "fmt" 14 15 "github.com/pbberlin/tools/net/http/loghttp" 16 ) 17 18 type User struct { 19 Customer string 20 Comment search.HTML 21 Visits float64 22 LastVisit time.Time 23 Birthday time.Time 24 } 25 26 func searchPut(w http.ResponseWriter, r *http.Request) { 27 28 lg, b := loghttp.BuffLoggerUniversal(w, r) 29 _ = b 30 31 id := "PA6-5001" 32 user := &User{ 33 Customer: "Carl Corral", 34 Comment: "I am <em>riled up</em> text", 35 Visits: 1, 36 LastVisit: time.Now(), 37 Birthday: time.Date(1968, time.May, 19, 0, 0, 0, 0, time.UTC), 38 } 39 40 c := appengine.NewContext(r) 41 42 index, err := search.Open("users") 43 lg(err) 44 45 ret_id, err := index.Put(c, id, user) 46 lg(err) 47 48 fmt.Fprint(w, "OK, saved "+ret_id+"\n\n") 49 50 var u2 User 51 err = index.Get(c, ret_id, &u2) 52 lg(err) 53 fmt.Fprint(w, "Retrieved document: ", u2) 54 55 } 56 57 func searchRetrieve(w http.ResponseWriter, r *http.Request) { 58 59 lg, b := loghttp.BuffLoggerUniversal(w, r) 60 _ = b 61 62 c := appengine.NewContext(r) 63 index, err := search.Open("users") 64 lg(err) 65 66 for t := index.Search(c, "Comment:riled", nil); ; { 67 var res User 68 id, err := t.Next(&res) 69 fmt.Fprintf(w, "\n-- ") 70 if err == search.Done { 71 break 72 } 73 if err != nil { 74 fmt.Fprintf(w, "Search error: %v\n", err) 75 break 76 } 77 fmt.Fprintf(w, "%s -> %#v\n", id, res) 78 } 79 } 80 81 func init() { 82 83 http.HandleFunc("/fulltext-search/put", searchPut) 84 http.HandleFunc("/fulltext-search/get", searchRetrieve) 85 86 }