-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathsearchParams.go
72 lines (61 loc) · 1.86 KB
/
searchParams.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
package solr
import (
"net/url"
)
const defaultRows = 10
// SearchParams represents the parameters used to issue a
// search in Solr.
type SearchParams struct {
Q string
Fl []string
Rows int
Start int
FilterQueries filterQueries // Values that will be passed as the fq parameter.
Facets Facets // Facets to request from Solr.
Options map[string]string // Options to pass straight to Solr (e.g. defType: "edismax")
}
// NewSearchParamsFromQs creates a SearchParams object from a query string.
// This method will automatically pickup several known parameters from the
// query string (q, rows, start, and fq).
//
// qs typically an instance of req.URL.Query() from a web handler.
func NewSearchParamsFromQs(qs url.Values, options map[string]string,
facets map[string]string) SearchParams {
params := SearchParams{
Q: qsGet(qs, "q", "*"),
Rows: qsGetInt(qs, "rows", defaultRows),
Start: qsGetInt(qs, "start", 0),
FilterQueries: newFilterQueries(qs["fq"]),
Options: options,
Facets: NewFacetsFromDefinitions(facets),
}
return params
}
// NewSearchParams from a search string.
func NewSearchParams(q string, options map[string]string,
facets map[string]string) SearchParams {
params := SearchParams{
Q: q,
Options: options,
Facets: NewFacetsFromDefinitions(facets),
}
params.Rows = defaultRows
return params
}
func (params SearchParams) toSolrQueryString() string {
qs := ""
qs += qsAddDefault("q", params.Q, "*")
qs += qsAddMany("fl", params.Fl)
qs += params.FilterQueries.toQueryString()
qs += params.Facets.toQueryString()
if params.Start > 0 {
qs += qsAddInt("start", params.Start)
}
if params.Rows != defaultRows {
qs += qsAddInt("rows", params.Rows)
}
for k, v := range params.Options {
qs += qsAdd(k, v)
}
return qs
}