Skip to content

Commit 268d1f9

Browse files
committed
Merge remote-tracking branch 'refs/remotes/jprante/master'
2 parents 2689591 + 68e21fd commit 268d1f9

File tree

13 files changed

+222
-78
lines changed

13 files changed

+222
-78
lines changed

README.md

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,9 @@ When importing archive files again, this information is reapplied.
2727

2828
| Elasticsearch | Plugin | Release date |
2929
| -------------- | -------------- | ------------ |
30+
| 2.3.0 | 2.3.0.0 | Mar 31, 2016 |
31+
| 2.2.1 | 2.2.1.0 | Mar 31, 2016 |
32+
| 2.1.2 | 2.1.2.0 | Mar 23, 2016 |
3033
| 2.2.0 | 2.2.0.0 | Feb 23, 2016 |
3134
| 2.1.1 | 2.1.1.0 | Dec 30, 2015 |
3235
| 2.1.0 | 2.1.0.0 | Dec 7, 2015 |
@@ -324,6 +327,37 @@ or
324327

325328
curl -XPOST 'localhost:9200/_import/abort'
326329

330+
# Handing Parent/Child documents
331+
332+
## Exporting
333+
334+
Handling dependant documents is bit tricky since indexing a child document requires the presence of its parent document. A simple approach is to export the documents into seperate archives by using a query. In case your child documents are located in the same type as the parent documents, define the appropriate filter in the query. If you have stored the child documents in a seperate type, you can export the type containing the parent documents like this:
335+
336+
curl -XPOST 'localhost:9200/myIndex/myParentDocs/_export?path=/tmp/myIndex_myParentDocs.zip'
337+
338+
When exporting the type containing the child documents, include the "_parent" meta field
339+
340+
curl -XPOST 'localhost:9200/myIndex/myChildDocs/_export?path=/tmp/myIndex_myChildDocs.zip'' -d '{
341+
"query" : {
342+
"match_all" : {
343+
}
344+
},
345+
"fields" : [ "_parent", "_source" ]
346+
}'
347+
348+
349+
## Importing Parent/Child documents
350+
351+
Before you import the parent documents, you have to create the index manually first: Each type export only contains the mapping of that spedific type and you cannot add a dependant mapping in a second step later. All dependant mappings must be created at the same time otherwise you'll get an error like "java.lang.IllegalArgumentException: Can't specify parent if no parent field has been configured". After creating the index, import the parent documents:
352+
353+
curl -XPOST 'localhost:9200/myIndex/myParentDocs/_import?path=/tmp/myIndex_myParentDocs.zip&createIndex=false'
354+
355+
Then import the child documents:
356+
357+
curl -XPOST 'localhost:9200/myIndex/myChildDocs/_import?path=/tmp/myIndex_myChildDocs.zip&createIndex=false'
358+
359+
Repeat this for all your child types.
360+
327361
# Java API
328362

329363
Knapsack implements all actions as Java transport actions in ELasticsearch.

build.gradle

Lines changed: 65 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,50 @@
1+
buildscript {
2+
repositories {
3+
mavenCentral()
4+
}
5+
dependencies {
6+
classpath 'co.riiid:gradle-github-plugin:0.4.2'
7+
classpath "io.codearte.gradle.nexus:gradle-nexus-staging-plugin:0.5.3"
8+
}
9+
}
10+
111
plugins {
212
id 'java'
3-
id 'com.github.johnrengelman.shadow' version '1.2.2'
13+
id 'com.github.johnrengelman.shadow' version '1.2.3'
14+
id 'org.ajoberstar.grgit' version '1.4.2'
415
}
516

6-
def xbibGroup = 'org.xbib.elasticsearch.plugin'
7-
def xbibVersion = '2.2.0.0'
17+
group = 'org.xbib.elasticsearch.plugin'
18+
version = '2.3.0.0'
819

9-
group = xbibGroup
10-
version = xbibVersion
20+
apply plugin: 'java'
21+
apply plugin: 'maven'
22+
apply plugin: 'signing'
23+
apply plugin: 'co.riiid.gradle'
1124

12-
println "Current JVM: " + org.gradle.internal.jvm.Jvm.current()
25+
println "Host: " + java.net.InetAddress.getLocalHost()
26+
println "Gradle: " + gradle.gradleVersion + " JVM: " + org.gradle.internal.jvm.Jvm.current() + " Groovy: " + GroovySystem.getVersion()
27+
println "Build: group: '${project.group}', name: '${project.name}', version: '${project.version}'"
28+
println "Timestamp: " + java.time.Instant.now().atZone(java.time.ZoneId.systemDefault()).toString()
1329

1430
ext {
1531
pluginName = 'knapsack'
1632
pluginClassname = 'org.xbib.elasticsearch.plugin.knapsack.KnapsackPlugin'
1733
pluginDescription = 'An import/export plugin for Elasticsearch'
34+
user = 'jprante'
35+
name = 'elasticsearch-knapsack'
36+
scmUrl = 'https://github.com/' + user + '/' + name
37+
scmConnection = 'scm:git:git://github.com/' + user + '/' + name + '.git'
38+
scmDeveloperConnection = 'scm:git:git://github.com/' + user + '/' + name + '.git'
1839
versions = [
19-
'elasticsearch' : '2.2.0',
20-
'elasticsearch-helper' : '2.2.0.3',
21-
'log4j': '2.5',
22-
'junit' : '4.12',
23-
'wagon' : '2.10'
40+
'elasticsearch' : '2.3.0',
41+
'elasticsearch-helper' : '2.3.0.0',
42+
'log4j': '2.5',
43+
'junit' : '4.12',
44+
'wagon' : '2.10'
2445
]
2546
}
2647

27-
apply plugin: 'java'
28-
apply plugin: 'maven'
29-
30-
sourceCompatibility = 1.7
31-
targetCompatibility = 1.7
3248

3349
repositories {
3450
mavenCentral()
@@ -70,12 +86,16 @@ dependencies {
7086
compile "org.apache.logging.log4j:log4j-core:${versions.log4j}"
7187
testCompile "junit:junit:${versions.junit}"
7288
integrationTestCompile "junit:junit:${versions.junit}"
89+
releaseJars "${project.group}:${project.name}:${project.version}"
7390
//releaseJars "${project.group}:${project.name}:${project.version}:all"
7491
wagon "org.apache.maven.wagon:wagon-ssh-external:${versions.wagon}"
7592
}
7693

94+
sourceCompatibility = 1.7
95+
targetCompatibility = 1.7
96+
7797
tasks.withType(JavaCompile) {
78-
options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation"
98+
options.compilerArgs << "-Xlint:unchecked,deprecation"
7999
}
80100

81101
test {
@@ -107,18 +127,6 @@ clean {
107127
delete "logs"
108128
}
109129

110-
task sourcesJar(type: Jar, dependsOn: classes) {
111-
from sourceSets.main.allSource
112-
into 'build/tmp/sources'
113-
classifier 'sources'
114-
}
115-
116-
shadowJar {
117-
baseName = project.name
118-
version = project.version
119-
classifier = 'all'
120-
}
121-
122130
task makePluginDescriptor(type: Copy) {
123131
from 'src/main/templates'
124132
into 'build/tmp/plugin'
@@ -137,45 +145,47 @@ task makePluginDescriptor(type: Copy) {
137145
])
138146
}
139147

140-
task pluginZip(type: Zip, dependsOn: [':jar', ':makePluginDescriptor']) {
141-
from files(libsDir)
148+
task buildPluginZip(type: Zip, dependsOn: [':jar', ':makePluginDescriptor']) {
142149
from configurations.releaseJars
143150
from 'build/tmp/plugin'
144151
classifier = 'plugin'
145152
}
146153

147-
task unpackPlugin(type: Copy, dependsOn: [':pluginZip']) {
154+
task unpackPlugin(type: Copy, dependsOn: [':buildPluginZip']) {
148155
delete "plugins"
149156
from configurations.releaseJars
150157
from 'build/tmp/plugin'
151158
into "plugins/${pluginName}"
152159
}
153160

161+
task sourcesJar(type: Jar, dependsOn: classes) {
162+
from sourceSets.main.allSource
163+
into 'build/tmp/sources'
164+
classifier 'sources'
165+
}
166+
167+
shadowJar {
168+
baseName = project.name
169+
classifier = 'all'
170+
}
171+
172+
task javadocJar(type: Jar, dependsOn: classes) {
173+
from javadoc
174+
into 'build/tmp'
175+
classifier 'javadoc'
176+
}
177+
154178
artifacts {
155-
archives sourcesJar, shadowJar, pluginZip
179+
archives javadocJar, sourcesJar, shadowJar, buildPluginZip
156180
}
157181

158-
uploadArchives {
159-
repositories {
160-
if (project.hasProperty("xbibUsername")) {
161-
mavenDeployer {
162-
configuration = configurations.wagon
163-
repository(
164-
id: 'xbib.org',
165-
url: uri('scpexe://xbib.org/repository'),
166-
authentication: [userName: xbibUsername, privateKey: xbibPrivateKey]
167-
)
168-
pom.project {
169-
inceptionYear '2012'
170-
licenses {
171-
license {
172-
name 'The Apache Software License, Version 2.0'
173-
url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
174-
distribution 'repo'
175-
}
176-
}
177-
}
178-
}
179-
}
182+
if (project.hasProperty('signing.keyId')) {
183+
signing {
184+
sign configurations.archives
180185
}
181186
}
187+
188+
ext.grgit = org.ajoberstar.grgit.Grgit.open()
189+
190+
apply from: 'gradle/git.gradle'
191+
apply from: 'gradle/publish.gradle'

gradle/git.gradle

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
2+
task gitRelease(dependsOn: build) << {
3+
grgit.add(patterns: ['.'], update: true)
4+
grgit.commit(message: "release of ${project.version}")
5+
grgit.tag.remove(names: [project.version])
6+
grgit.tag.add(name: project.version)
7+
grgit.push()
8+
grgit.push(tags: true)
9+
}

gradle/publish.gradle

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
apply plugin: 'io.codearte.nexus-staging'
2+
3+
/*
4+
nexus {
5+
attachJavadoc = true
6+
attachSources = true
7+
attachTests = true
8+
sign = true
9+
repositoryUrl = 'https://oss.sonatype.org/service/local/staging/deploy/maven2'
10+
snapshotRepositoryUrl = 'https://oss.sonatype.org/content/repositories/snapshots'
11+
}
12+
*/
13+
14+
nexusStaging {
15+
packageGroup = "org.xbib"
16+
}
17+
18+
uploadArchives {
19+
repositories {
20+
if (project.hasProperty("xbibUsername")) {
21+
mavenDeployer {
22+
configuration = configurations.wagon
23+
repository(id: 'xbib.org',
24+
url: uri('scpexe://xbib.org/repository'),
25+
authentication: [userName: xbibUsername, privateKey: xbibPrivateKey])
26+
}
27+
}
28+
if (project.hasProperty('ossrhUsername')) {
29+
mavenDeployer {
30+
beforeDeployment { MavenDeployment deployment -> signing.signPom(deployment) }
31+
repository(id: 'ossrh', url: uri(ossrhReleaseUrl),
32+
authentication: [userName: ossrhUsername, password: ossrhPassword])
33+
snapshotRepository(id: 'ossrh', url: uri(ossrhSnapshotUrl),
34+
authentication: [userName: ossrhUsername, password: ossrhPassword])
35+
pom.project {
36+
name pluginName
37+
description pluginDescription
38+
packaging 'jar'
39+
inceptionYear '2012'
40+
url url
41+
organization {
42+
name 'xbib'
43+
url 'http://xbib.org'
44+
}
45+
developers {
46+
developer {
47+
id user
48+
name 'Jörg Prante'
49+
email 'joergprante@gmail.com'
50+
url 'https://github.com/jprante'
51+
}
52+
}
53+
scm {
54+
url scmUrl
55+
connection scmConnection
56+
developerConnection scmDeveloperConnection
57+
}
58+
licenses {
59+
license {
60+
name 'The Apache License, Version 2.0'
61+
url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
62+
}
63+
}
64+
}
65+
}
66+
}
67+
}
68+
}
69+
70+
if (project.hasProperty('githubToken')) {
71+
github {
72+
owner = user
73+
token = githubToken
74+
repo = project.name
75+
name = project.version
76+
tagName = project.version
77+
targetCommitish = 'master'
78+
assets = [
79+
"build/distributions/${project.name}-${project.version}-plugin.zip"
80+
]
81+
}
82+
githubRelease {
83+
dependsOn gitRelease, buildPluginZip
84+
}
85+
}

src/main/java/org/xbib/elasticsearch/action/knapsack/abort/TransportKnapsackAbortAction.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import org.elasticsearch.common.logging.ESLoggerFactory;
2525
import org.elasticsearch.common.settings.Settings;
2626
import org.elasticsearch.threadpool.ThreadPool;
27+
import org.elasticsearch.transport.TransportService;
2728
import org.xbib.elasticsearch.knapsack.KnapsackService;
2829

2930
public class TransportKnapsackAbortAction extends TransportAction<KnapsackAbortRequest, KnapsackAbortResponse> {
@@ -33,11 +34,11 @@ public class TransportKnapsackAbortAction extends TransportAction<KnapsackAbortR
3334
private final KnapsackService knapsack;
3435

3536
@Inject
36-
public TransportKnapsackAbortAction(Settings settings,
37+
public TransportKnapsackAbortAction(Settings settings, TransportService transportService,
3738
ThreadPool threadPool, ActionFilters actionFilters,
3839
IndexNameExpressionResolver indexNameExpressionResolver,
3940
KnapsackService knapsack) {
40-
super(settings, KnapsackAbortAction.NAME, threadPool, actionFilters, indexNameExpressionResolver);
41+
super(settings, KnapsackAbortAction.NAME, threadPool, actionFilters, indexNameExpressionResolver, transportService.getTaskManager());
4142
this.knapsack = knapsack;
4243
}
4344

src/main/java/org/xbib/elasticsearch/action/knapsack/exp/TransportKnapsackExportAction.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
import org.elasticsearch.search.SearchHit;
3535
import org.elasticsearch.search.sort.SortBuilders;
3636
import org.elasticsearch.threadpool.ThreadPool;
37+
import org.elasticsearch.transport.TransportService;
3738
import org.joda.time.DateTime;
3839
import org.xbib.elasticsearch.knapsack.KnapsackParameter;
3940
import org.xbib.elasticsearch.knapsack.KnapsackService;
@@ -70,12 +71,12 @@ public class TransportKnapsackExportAction extends TransportAction<KnapsackExpor
7071
private final KnapsackService knapsack;
7172

7273
@Inject
73-
public TransportKnapsackExportAction(Settings settings,
74-
ThreadPool threadPool,
74+
public TransportKnapsackExportAction(Settings settings, ThreadPool threadPool,
7575
Client client, NodeService nodeService, ActionFilters actionFilters,
7676
IndexNameExpressionResolver indexNameExpressionResolver,
77+
TransportService transportService,
7778
KnapsackService knapsack) {
78-
super(settings, KnapsackExportAction.NAME, threadPool, actionFilters, indexNameExpressionResolver);
79+
super(settings, KnapsackExportAction.NAME, threadPool, actionFilters, indexNameExpressionResolver, transportService.getTaskManager());
7980
this.client = client;
8081
this.nodeService = nodeService;
8182
this.knapsack = knapsack;

src/main/java/org/xbib/elasticsearch/action/knapsack/imp/TransportKnapsackImportAction.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
import org.elasticsearch.indices.IndexAlreadyExistsException;
3838
import org.elasticsearch.node.service.NodeService;
3939
import org.elasticsearch.threadpool.ThreadPool;
40+
import org.elasticsearch.transport.TransportService;
4041
import org.joda.time.DateTime;
4142
import org.xbib.elasticsearch.helper.client.BulkNodeClient;
4243
import org.xbib.elasticsearch.helper.client.ClientBuilder;
@@ -75,13 +76,12 @@ public class TransportKnapsackImportAction extends TransportAction<KnapsackImpor
7576
private final KnapsackService knapsack;
7677

7778
@Inject
78-
public TransportKnapsackImportAction(Settings settings,
79-
ThreadPool threadPool,
80-
Client client,
81-
NodeService nodeService, ActionFilters actionFilters,
79+
public TransportKnapsackImportAction(Settings settings, ThreadPool threadPool,
80+
Client client, NodeService nodeService, ActionFilters actionFilters,
8281
IndexNameExpressionResolver indexNameExpressionResolver,
82+
TransportService transportService,
8383
KnapsackService knapsack) {
84-
super(settings, KnapsackImportAction.NAME, threadPool, actionFilters, indexNameExpressionResolver);
84+
super(settings, KnapsackImportAction.NAME, threadPool, actionFilters, indexNameExpressionResolver, transportService.getTaskManager());
8585
this.client = client;
8686
this.nodeService = nodeService;
8787
this.knapsack = knapsack;

0 commit comments

Comments
 (0)