Skip to content

Commit 6912e3f

Browse files
authored
Merge pull request #15 from datacite/support-camel-case-queries
Support camel case queries
2 parents c956de5 + 1cf48e0 commit 6912e3f

1 file changed

Lines changed: 28 additions & 21 deletions

File tree

opensearch.go

Lines changed: 28 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -17,25 +17,30 @@ type OSClient = *opensearch.Client
1717
type OSAggregation = osquery.Aggregation
1818
type OSResponse = *opensearchapi.SearchResp
1919

20-
var camelCaseToSnakeCaseFields = map[string]string{
21-
"publicationYear": "publication_year",
22-
"relatedIdentifiers": "related_identifiers",
23-
"relatedItems": "related_items",
24-
"rightsList": "rights_list",
25-
"fundingReferences": "funding_references",
26-
"geoLocations": "geo_locations",
27-
"version:": "version_info:",
28-
"landingPage": "landing_page",
29-
"contentUrl": "content_url",
30-
"citationCount": "citation_count",
31-
"viewCount": "view_count",
32-
"downloadCount": "download_count",
33-
"schemaVersion": "schema_version",
34-
"/": "\\/",
20+
var camelCaseToSnakeCaseFields = []struct {
21+
camelCase string
22+
snakeCase string
23+
}{
24+
{"publicationYear", "publication_year"},
25+
{"relatedIdentifiers", "related_identifiers"},
26+
{"relatedItems", "related_items"},
27+
{"rightsList", "rights_list"},
28+
{"fundingReferences", "funding_references"},
29+
{"geoLocations", "geo_locations"},
30+
{"version:", "version_info:"},
31+
{"landingPage", "landing_page"},
32+
{"contentUrl", "content_url"},
33+
{"citationCount", "citation_count"},
34+
{"viewCount", "view_count"},
35+
{"downloadCount", "download_count"},
36+
{"schemaVersion", "schema_version"},
3537
}
3638

37-
var camelCaseToSnakeCaseFieldsRegex = map[string]string{
38-
`(publisher\.)(name|publisherIdentifier|publisherIdentifierScheme|schemeUri|lang)`: "publisher_obj.$2",
39+
var camelCaseToSnakeCaseFieldsRegex = []struct {
40+
regex string
41+
snakeCase string
42+
}{
43+
{`(publisher\.)(name|publisherIdentifierScheme|publisherIdentifier|schemeUri|lang)`, "publisher_obj.$2"},
3944
}
4045

4146
func InitOpenSearch() OSClient {
@@ -83,14 +88,16 @@ func BuildBaseQuery(clientId string, providerId string, consortiumId string, que
8388

8489
func buildQueryString(query string) *osquery.CustomQueryMap {
8590
// support camel case for certain fields for consistency with lupo
86-
for camelCase, snakeCase := range camelCaseToSnakeCaseFields {
87-
query = strings.ReplaceAll(query, camelCase, snakeCase)
91+
for _, field := range camelCaseToSnakeCaseFields {
92+
query = strings.ReplaceAll(query, field.camelCase, field.snakeCase)
8893
}
8994

90-
for regex, field := range camelCaseToSnakeCaseFieldsRegex {
91-
query = regexp.MustCompile(regex).ReplaceAllString(query, field)
95+
for _, field := range camelCaseToSnakeCaseFieldsRegex {
96+
query = regexp.MustCompile(field.regex).ReplaceAllString(query, field.snakeCase)
9297
}
9398

99+
query = strings.ReplaceAll(query, "/", "\\/")
100+
94101
queryString := map[string]any{
95102
"query_string": map[string]any{
96103
"query": query,

0 commit comments

Comments
 (0)