Christopher Ramey
2 years ago
3 changed files with 68 additions and 48 deletions
@ -0,0 +1,64 @@ |
|||||
|
package main |
||||
|
|
||||
|
import ( |
||||
|
"context" |
||||
|
"encoding/json" |
||||
|
"flag" |
||||
|
"fmt" |
||||
|
"os" |
||||
|
|
||||
|
elastic "github.com/olivere/elastic/v7" |
||||
|
) |
||||
|
|
||||
|
func handleSearchCommand() { |
||||
|
cmd := flag.NewFlagSet("search", flag.ExitOnError) |
||||
|
cmd.SetOutput(os.Stdout) |
||||
|
cmd.Usage = func() { |
||||
|
fmt.Printf("Usage: %s search <index> <search term(s)>\n", os.Args[0]) |
||||
|
cmd.PrintDefaults() |
||||
|
} |
||||
|
cfgpath := cmd.String("config", "", "path to configuration") |
||||
|
server := cmd.String("server", "", "server name to use") |
||||
|
fields := cmd.String("fields", "*", "fields to include in search") |
||||
|
size := cmd.Int("size", 10, "maximum number of results returned") |
||||
|
from := cmd.Int("from", 0, "count to start search results from") |
||||
|
defop := cmd.String("defop", "AND", "default search operator") |
||||
|
|
||||
|
cmd.Parse(os.Args[2:]) |
||||
|
|
||||
|
if *defop != "AND" && *defop != "OR" { |
||||
|
fmt.Fprintf(os.Stderr, "default operator must be AND or OR\n") |
||||
|
cmd.Usage() |
||||
|
os.Exit(1) |
||||
|
} |
||||
|
|
||||
|
if len(cmd.Args()) < 2 { |
||||
|
fmt.Fprintf(os.Stderr, "index name and query required for search\n") |
||||
|
cmd.Usage() |
||||
|
os.Exit(1) |
||||
|
} |
||||
|
|
||||
|
cfg := LoadConfig(*cfgpath) |
||||
|
es := cfg.GetClient(*server) |
||||
|
|
||||
|
res, err := es.Search(). |
||||
|
Index(cmd.Arg(0)). |
||||
|
StoredField(*fields). |
||||
|
Size(*size). |
||||
|
From(*from). |
||||
|
Query(elastic.NewQueryStringQuery(cmd.Arg(1)).DefaultOperator(*defop)). |
||||
|
Do(context.Background()) |
||||
|
if err != nil { |
||||
|
fmt.Fprintf(os.Stderr, "elastic error: %s\n", err.Error()) |
||||
|
os.Exit(1) |
||||
|
} |
||||
|
for _, r := range res.Hits.Hits { |
||||
|
b, err := json.Marshal(r.Fields) |
||||
|
if err != nil { |
||||
|
fmt.Fprintf(os.Stderr, "marshal error: %s\n", err.Error()) |
||||
|
os.Exit(1) |
||||
|
} |
||||
|
fmt.Fprintf(os.Stdout, "%s: %s\n", r.Id, string(b)) |
||||
|
} |
||||
|
fmt.Fprintf(os.Stdout, "Total: %d\n", res.Hits.TotalHits.Value) |
||||
|
} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue