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  }