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