Skip to content

Commit 892e4d4

Browse files
authored
Merge pull request #7 from stevenferrer/feature/filter-gram-sizes
include maxGram and minGram in schema.Filter
2 parents f93d24f + dfe406a commit 892e4d4

32 files changed

+180
-199
lines changed

Makefile

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,10 @@
1-
.PHONY: test
2-
test:
3-
go test -v -cover ./...
1+
SOLR_INST ?="solr-go-test"
2+
COLLECTION ?= "gettingstarted"
43

54
.PHONY: solr
6-
solr:
7-
docker rm -f solr-test || true
8-
docker run -d -p 8983:8983 --name solr-test solr:latest solr-precreate gettingstarted
5+
solr: stop-solr
6+
docker run -d -p 8983:8983 --name $(SOLR_INST) solr:latest solr-precreate $(COLLECTION)
97

108
.PHONY: stop-solr
119
stop-solr:
12-
docker rm -f solr-test || true
10+
docker rm -f $(SOLR_INST) || true

README.md

Lines changed: 51 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,21 +2,65 @@
22
[![CircleCI](https://circleci.com/gh/stevenferrer/solr-go.svg?style=shield)](https://circleci.com/gh/stevenferrer/solr-go)
33
[![Coverage Status](https://coveralls.io/repos/github/stevenferrer/solr-go/badge.svg?branch=master)](https://coveralls.io/github/stevenferrer/solr-go?branch=master)
44

5-
# solr-go
5+
# Solr-Go
66

7-
[Solr](https://lucene.apache.org/solr/) client for [Go](http://go.dev/).
7+
[Solr](https://lucene.apache.org/solr/) client for [Go](http://go.dev/).
8+
9+
```go
10+
11+
import (
12+
"context"
13+
// Import the package that you need
14+
solrquery "github.com/stevenferrer/solr-go/query"
15+
)
16+
17+
func main() {
18+
// Initialize the query client
19+
queryClient := solrquery.NewClient("localhost", 8983)
20+
21+
// Start querying!
22+
queryResp, err := queryClient.Query(
23+
context.Background(),
24+
"techproducts", // name of your collection
25+
map[string]interface{}{
26+
"query": "{!lucene df=name v=iPod}",
27+
},
28+
)
29+
...
30+
}
31+
```
32+
33+
## Notes
34+
* This is a *WORK IN-PROGRESS*, API might change a lot before *v1*
35+
* Currently being used in my project
36+
* Tested on [Solr 8.5](https://lucene.apache.org/solr/guide/8_5/)
837

938
## Contents
1039

11-
- [solr-go](#solr-go)
40+
- [Solr-Go](#solr-go)
41+
- [Notes](#notes)
1242
- [Contents](#contents)
13-
- [Installation and usage](#installation-and-usage)
43+
- [Installation](#installation)
44+
- [Usage](#usage)
1445
- [Features](#features)
1546
- [Contributing](#contributing)
1647

17-
## Installation and usage
48+
## Installation
49+
50+
You can include it in your *go.mod* by running in your terminal (assuming you're inside the project directory):
51+
52+
```console
53+
$ go get github.com/stevenferrer/solr-go
54+
```
55+
56+
## Usage
57+
58+
Detailed documentation shall follow. For now you can start looking at the examples inside each package directory.
1859

19-
TODO
60+
* [Index API example](./index/examples/main.go)
61+
* [Query API example](./query/example/main.go)
62+
* [Schema API example](./schema/example/main.go)
63+
* Suggester API example - TODO
2064

2165
## Features
2266

@@ -46,4 +90,4 @@ TODO
4690

4791
## Contributing
4892

49-
This is a work in-progres, any contributions are very welcome!
93+
This is a **work in-progress**, any contributions are very welcome!

schema/client_test.go

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -316,8 +316,14 @@ func TestModifySchema(t *testing.T) {
316316
// with 2 analyzers
317317
IndexAnalyzer: &schema.Analyzer{
318318
Tokenizer: &schema.Tokenizer{
319-
Class: "solr.PathHierarchyTokenizerFactory",
320-
Delimeter: "/",
319+
Class: "solr.StandardTokenizerFactory",
320+
},
321+
Filters: []schema.Filter{
322+
{
323+
Class: "solr.EdgeNGramFilterFactory",
324+
MinGramSize: 1,
325+
MaxGramSize: 100,
326+
},
321327
},
322328
},
323329
QueryAnalyzer: &schema.Analyzer{
@@ -327,7 +333,6 @@ func TestModifySchema(t *testing.T) {
327333
},
328334
},
329335
},
330-
331336
{
332337
name: "replace field type with error",
333338
command: "replace-field-type",

schema/fixtures/add-copy-field-ok.yaml

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
version: 1
33
interactions:
44
- request:
5-
body: '{"add-dynamic-field":{"name":"*_shelf","stored":true,"type":"string"}}'
5+
body: '{"add-dynamic-field":{"name":"*_shelf","type":"string","stored":true}}'
66
form: {}
77
headers:
88
Content-Type:
@@ -14,14 +14,12 @@ interactions:
1414
{
1515
"responseHeader":{
1616
"status":0,
17-
"QTime":568}}
17+
"QTime":1244}}
1818
headers:
1919
Content-Length:
20-
- "57"
20+
- "58"
2121
Content-Security-Policy:
22-
- default-src 'none'; base-uri 'none'; connect-src 'self'; form-action 'self';
23-
font-src 'self'; frame-ancestors 'none'; img-src 'self'; media-src 'self';
24-
style-src 'self' 'unsafe-inline'; script-src 'self'; worker-src 'self';
22+
- default-src 'none'; base-uri 'none'; connect-src 'self'; form-action 'self'; font-src 'self'; frame-ancestors 'none'; img-src 'self'; media-src 'self'; style-src 'self' 'unsafe-inline'; script-src 'self'; worker-src 'self';
2523
Content-Type:
2624
- text/plain;charset=utf-8
2725
X-Content-Type-Options:
@@ -34,7 +32,7 @@ interactions:
3432
code: 200
3533
duration: ""
3634
- request:
37-
body: '{"add-copy-field":{"dest":"_text_","source":"*_shelf"}}'
35+
body: '{"add-copy-field":{"source":"*_shelf","dest":"_text_"}}'
3836
form: {}
3937
headers:
4038
Content-Type:
@@ -46,14 +44,12 @@ interactions:
4644
{
4745
"responseHeader":{
4846
"status":0,
49-
"QTime":533}}
47+
"QTime":866}}
5048
headers:
5149
Content-Length:
5250
- "57"
5351
Content-Security-Policy:
54-
- default-src 'none'; base-uri 'none'; connect-src 'self'; form-action 'self';
55-
font-src 'self'; frame-ancestors 'none'; img-src 'self'; media-src 'self';
56-
style-src 'self' 'unsafe-inline'; script-src 'self'; worker-src 'self';
52+
- default-src 'none'; base-uri 'none'; connect-src 'self'; form-action 'self'; font-src 'self'; frame-ancestors 'none'; img-src 'self'; media-src 'self'; style-src 'self' 'unsafe-inline'; script-src 'self'; worker-src 'self';
5753
Content-Type:
5854
- text/plain;charset=utf-8
5955
X-Content-Type-Options:

schema/fixtures/add-copy-field-with-error.yaml

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ interactions:
1414
{
1515
"responseHeader":{
1616
"status":400,
17-
"QTime":1},
17+
"QTime":2},
1818
"error":{
1919
"metadata":[
2020
"error-class","org.apache.solr.api.ApiBag$ExceptionWithErrObject",
@@ -29,9 +29,7 @@ interactions:
2929
Content-Length:
3030
- "440"
3131
Content-Security-Policy:
32-
- default-src 'none'; base-uri 'none'; connect-src 'self'; form-action 'self';
33-
font-src 'self'; frame-ancestors 'none'; img-src 'self'; media-src 'self';
34-
style-src 'self' 'unsafe-inline'; script-src 'self'; worker-src 'self';
32+
- default-src 'none'; base-uri 'none'; connect-src 'self'; form-action 'self'; font-src 'self'; frame-ancestors 'none'; img-src 'self'; media-src 'self'; style-src 'self' 'unsafe-inline'; script-src 'self'; worker-src 'self';
3533
Content-Type:
3634
- text/plain;charset=utf-8
3735
X-Content-Type-Options:

schema/fixtures/add-dynamic-field-ok.yaml

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
version: 1
33
interactions:
44
- request:
5-
body: '{"add-dynamic-field":{"name":"*_wtf","stored":true,"type":"string"}}'
5+
body: '{"add-dynamic-field":{"name":"*_wtf","type":"string","stored":true}}'
66
form: {}
77
headers:
88
Content-Type:
@@ -14,14 +14,12 @@ interactions:
1414
{
1515
"responseHeader":{
1616
"status":0,
17-
"QTime":512}}
17+
"QTime":987}}
1818
headers:
1919
Content-Length:
2020
- "57"
2121
Content-Security-Policy:
22-
- default-src 'none'; base-uri 'none'; connect-src 'self'; form-action 'self';
23-
font-src 'self'; frame-ancestors 'none'; img-src 'self'; media-src 'self';
24-
style-src 'self' 'unsafe-inline'; script-src 'self'; worker-src 'self';
22+
- default-src 'none'; base-uri 'none'; connect-src 'self'; form-action 'self'; font-src 'self'; frame-ancestors 'none'; img-src 'self'; media-src 'self'; style-src 'self' 'unsafe-inline'; script-src 'self'; worker-src 'self';
2523
Content-Type:
2624
- text/plain;charset=utf-8
2725
X-Content-Type-Options:

schema/fixtures/add-dynamic-field-with-error.yaml

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
version: 1
33
interactions:
44
- request:
5-
body: '{"add-dynamic-field":{}}'
5+
body: '{"add-dynamic-field":{"name":""}}'
66
form: {}
77
headers:
88
Content-Type:
@@ -14,24 +14,21 @@ interactions:
1414
{
1515
"responseHeader":{
1616
"status":400,
17-
"QTime":1},
17+
"QTime":3},
1818
"error":{
1919
"metadata":[
2020
"error-class","org.apache.solr.api.ApiBag$ExceptionWithErrObject",
2121
"root-error-class","org.apache.solr.api.ApiBag$ExceptionWithErrObject"],
2222
"details":[{
23-
"add-dynamic-field":{},
24-
"errorMessages":["'name' is a required field",
25-
"'type' is a required field"]}],
23+
"add-dynamic-field":{"name":""},
24+
"errorMessages":["'type' is a required field"]}],
2625
"msg":"error processing commands",
2726
"code":400}}
2827
headers:
2928
Content-Length:
30-
- "441"
29+
- "410"
3130
Content-Security-Policy:
32-
- default-src 'none'; base-uri 'none'; connect-src 'self'; form-action 'self';
33-
font-src 'self'; frame-ancestors 'none'; img-src 'self'; media-src 'self';
34-
style-src 'self' 'unsafe-inline'; script-src 'self'; worker-src 'self';
31+
- default-src 'none'; base-uri 'none'; connect-src 'self'; form-action 'self'; font-src 'self'; frame-ancestors 'none'; img-src 'self'; media-src 'self'; style-src 'self' 'unsafe-inline'; script-src 'self'; worker-src 'self';
3532
Content-Type:
3633
- text/plain;charset=utf-8
3734
X-Content-Type-Options:

schema/fixtures/add-field-ok.yaml

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
version: 1
33
interactions:
44
- request:
5-
body: '{"add-field":{"name":"sell_by","stored":true,"type":"pdate"}}'
5+
body: '{"add-field":{"name":"sell_by","type":"pdate","stored":true}}'
66
form: {}
77
headers:
88
Content-Type:
@@ -14,14 +14,12 @@ interactions:
1414
{
1515
"responseHeader":{
1616
"status":0,
17-
"QTime":1066}}
17+
"QTime":1265}}
1818
headers:
1919
Content-Length:
2020
- "58"
2121
Content-Security-Policy:
22-
- default-src 'none'; base-uri 'none'; connect-src 'self'; form-action 'self';
23-
font-src 'self'; frame-ancestors 'none'; img-src 'self'; media-src 'self';
24-
style-src 'self' 'unsafe-inline'; script-src 'self'; worker-src 'self';
22+
- default-src 'none'; base-uri 'none'; connect-src 'self'; form-action 'self'; font-src 'self'; frame-ancestors 'none'; img-src 'self'; media-src 'self'; style-src 'self' 'unsafe-inline'; script-src 'self'; worker-src 'self';
2523
Content-Type:
2624
- text/plain;charset=utf-8
2725
X-Content-Type-Options:

schema/fixtures/add-field-type-ok.yaml

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
version: 1
33
interactions:
44
- request:
5-
body: '{"add-field-type":{"class":"solr.TextField","indexAnalyzer":{"tokenizer":{"class":"solr.PathHierarchyTokenizerFactory","delimiter":"/"}},"name":"myNewTextField","queryAnalyzer":{"tokenizer":{"class":"solr.KeywordTokenizerFactory"}}}}'
5+
body: '{"add-field-type":{"name":"myNewTextField","class":"solr.TextField","indexAnalyzer":{"tokenizer":{"class":"solr.StandardTokenizerFactory"},"filters":[{"class":"solr.EdgeNGramFilterFactory","minGramSize":1,"maxGramSize":100}]},"queryAnalyzer":{"tokenizer":{"class":"solr.KeywordTokenizerFactory"}}}}'
66
form: {}
77
headers:
88
Content-Type:
@@ -14,14 +14,12 @@ interactions:
1414
{
1515
"responseHeader":{
1616
"status":0,
17-
"QTime":921}}
17+
"QTime":1553}}
1818
headers:
1919
Content-Length:
20-
- "57"
20+
- "58"
2121
Content-Security-Policy:
22-
- default-src 'none'; base-uri 'none'; connect-src 'self'; form-action 'self';
23-
font-src 'self'; frame-ancestors 'none'; img-src 'self'; media-src 'self';
24-
style-src 'self' 'unsafe-inline'; script-src 'self'; worker-src 'self';
22+
- default-src 'none'; base-uri 'none'; connect-src 'self'; form-action 'self'; font-src 'self'; frame-ancestors 'none'; img-src 'self'; media-src 'self'; style-src 'self' 'unsafe-inline'; script-src 'self'; worker-src 'self';
2523
Content-Type:
2624
- text/plain;charset=utf-8
2725
X-Content-Type-Options:

schema/fixtures/add-field-type-with-error.yaml

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
version: 1
33
interactions:
44
- request:
5-
body: '{"add-field-type":{}}'
5+
body: '{"add-field-type":{"name":""}}'
66
form: {}
77
headers:
88
Content-Type:
@@ -20,18 +20,15 @@ interactions:
2020
"error-class","org.apache.solr.api.ApiBag$ExceptionWithErrObject",
2121
"root-error-class","org.apache.solr.api.ApiBag$ExceptionWithErrObject"],
2222
"details":[{
23-
"add-field-type":{},
24-
"errorMessages":["'name' is a required field",
25-
"'class' is a required field"]}],
23+
"add-field-type":{"name":""},
24+
"errorMessages":["'class' is a required field"]}],
2625
"msg":"error processing commands",
2726
"code":400}}
2827
headers:
2928
Content-Length:
30-
- "439"
29+
- "408"
3130
Content-Security-Policy:
32-
- default-src 'none'; base-uri 'none'; connect-src 'self'; form-action 'self';
33-
font-src 'self'; frame-ancestors 'none'; img-src 'self'; media-src 'self';
34-
style-src 'self' 'unsafe-inline'; script-src 'self'; worker-src 'self';
31+
- default-src 'none'; base-uri 'none'; connect-src 'self'; form-action 'self'; font-src 'self'; frame-ancestors 'none'; img-src 'self'; media-src 'self'; style-src 'self' 'unsafe-inline'; script-src 'self'; worker-src 'self';
3532
Content-Type:
3633
- text/plain;charset=utf-8
3734
X-Content-Type-Options:

0 commit comments

Comments
 (0)