func Search(ss string, size, from int) ([][]byte, error) { query := bleve.NewQueryStringQuery(ss) search := bleve.NewSearchRequestOptions(query, size, from, false) searchResults, err := index.Search(search) if err != nil { log.Println("Error: search engine Search(): %s \n", err) return [][]byte{}, err } //fmt.Println(searchResults) ids := [][]byte{} for i := 0; i < searchResults.Hits.Len(); i = i + 1 { if searchResults.Hits[i] != nil { ids = append(ids, []byte(searchResults.Hits[i].ID)) } } return ids, nil }
func main() { flag.Parse() if *cpuprofile != "" { f, err := os.Create(*cpuprofile) if err != nil { log.Fatal(err) } err = pprof.StartCPUProfile(f) if err != nil { log.Fatal(err) } defer pprof.StopCPUProfile() } if *indexPath == "" { log.Fatal("Specify index to query") } if flag.NArg() < 1 { log.Fatal("Specify search query") } // open index index, err := bleve.Open(*indexPath) if err != nil { log.Fatal(err) } defer func() { cerr := index.Close() if cerr != nil { log.Fatalf("error closing index: %v", err) } }() for i := 0; i < *repeat; i++ { var query bleve.Query switch *qtype { case "prefix": pquery := bleve.NewPrefixQuery(strings.Join(flag.Args(), " ")) if *qfield != "" { pquery.SetField(*qfield) } query = pquery case "term": pquery := bleve.NewTermQuery(strings.Join(flag.Args(), " ")) if *qfield != "" { pquery.SetField(*qfield) } query = pquery default: // build a search with the provided parameters queryString := strings.Join(flag.Args(), " ") query = bleve.NewQueryStringQuery(queryString) } searchRequest := bleve.NewSearchRequestOptions(query, *limit, *skip, *explain) // enable highlights if requested if *includeHighlights { searchRequest.Highlight = bleve.NewHighlightWithStyle("ansi") } if *includeStoredFields { searchRequest.Fields = []string{"*"} } // execute the search searchResult, err := index.Search(searchRequest) if err != nil { log.Fatalf("search error: %v", err) } fmt.Println(searchResult) } }