http://git-wip-us.apache.org/repos/asf/polygene-java/blob/a5feec04/internals/testsupport-internal/src/main/docker/memcached/Dockerfile
----------------------------------------------------------------------
diff --git 
a/internals/testsupport-internal/src/main/docker/memcached/Dockerfile 
b/internals/testsupport-internal/src/main/docker/memcached/Dockerfile
new file mode 100644
index 0000000..0b1a4b2
--- /dev/null
+++ b/internals/testsupport-internal/src/main/docker/memcached/Dockerfile
@@ -0,0 +1,16 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+FROM @memcached@

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/a5feec04/internals/testsupport-internal/src/main/docker/mysql/Dockerfile
----------------------------------------------------------------------
diff --git a/internals/testsupport-internal/src/main/docker/mysql/Dockerfile 
b/internals/testsupport-internal/src/main/docker/mysql/Dockerfile
new file mode 100644
index 0000000..967d45d
--- /dev/null
+++ b/internals/testsupport-internal/src/main/docker/mysql/Dockerfile
@@ -0,0 +1,16 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+FROM @mariadb@
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/a5feec04/internals/testsupport-internal/src/main/docker/postgres/Dockerfile
----------------------------------------------------------------------
diff --git a/internals/testsupport-internal/src/main/docker/postgres/Dockerfile 
b/internals/testsupport-internal/src/main/docker/postgres/Dockerfile
new file mode 100644
index 0000000..d3dad53
--- /dev/null
+++ b/internals/testsupport-internal/src/main/docker/postgres/Dockerfile
@@ -0,0 +1,17 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+FROM @postgres@
+COPY init-test-db.sh /docker-entrypoint-initdb.d/init-test-db.sh

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/a5feec04/internals/testsupport-internal/src/main/docker/postgres/init-test-db.sh
----------------------------------------------------------------------
diff --git 
a/internals/testsupport-internal/src/main/docker/postgres/init-test-db.sh 
b/internals/testsupport-internal/src/main/docker/postgres/init-test-db.sh
new file mode 100755
index 0000000..347d78d
--- /dev/null
+++ b/internals/testsupport-internal/src/main/docker/postgres/init-test-db.sh
@@ -0,0 +1,29 @@
+#!/bin/sh
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+set -e
+
+# Create test user and database
+psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" <<-EOSQL
+    CREATE USER jdbc_test_login;
+    CREATE DATABASE jdbc_test_db;
+    GRANT ALL PRIVILEGES ON DATABASE jdbc_test_db TO jdbc_test_login;
+EOSQL
+
+# Enable ltree extension on test database
+psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" -d jdbc_test_db <<-EOSQL
+    CREATE EXTENSION ltree;
+EOSQL

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/a5feec04/internals/testsupport-internal/src/main/docker/redis/Dockerfile
----------------------------------------------------------------------
diff --git a/internals/testsupport-internal/src/main/docker/redis/Dockerfile 
b/internals/testsupport-internal/src/main/docker/redis/Dockerfile
new file mode 100644
index 0000000..d0e67fc
--- /dev/null
+++ b/internals/testsupport-internal/src/main/docker/redis/Dockerfile
@@ -0,0 +1,16 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+FROM @redis@

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/a5feec04/internals/testsupport-internal/src/main/docker/riak/Dockerfile
----------------------------------------------------------------------
diff --git a/internals/testsupport-internal/src/main/docker/riak/Dockerfile 
b/internals/testsupport-internal/src/main/docker/riak/Dockerfile
new file mode 100644
index 0000000..776d7af
--- /dev/null
+++ b/internals/testsupport-internal/src/main/docker/riak/Dockerfile
@@ -0,0 +1,16 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+FROM @riak@

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/a5feec04/internals/testsupport-internal/src/main/docker/s3server/Dockerfile
----------------------------------------------------------------------
diff --git a/internals/testsupport-internal/src/main/docker/s3server/Dockerfile 
b/internals/testsupport-internal/src/main/docker/s3server/Dockerfile
new file mode 100644
index 0000000..a4bff87
--- /dev/null
+++ b/internals/testsupport-internal/src/main/docker/s3server/Dockerfile
@@ -0,0 +1,20 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+FROM @s3server@
+
+# See https://github.com/scality/S3/blob/master/DOCKER.md
+ENV SCALITY_ACCESS_KEY_ID dummyIdentifier
+ENV SCALITY_SECRET_ACCESS_KEY dummyCredential

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/a5feec04/internals/testsupport-internal/src/main/java/org/apache/polygene/test/docker/DelayChecker.java
----------------------------------------------------------------------
diff --git 
a/internals/testsupport-internal/src/main/java/org/apache/polygene/test/docker/DelayChecker.java
 
b/internals/testsupport-internal/src/main/java/org/apache/polygene/test/docker/DelayChecker.java
new file mode 100644
index 0000000..36de1ea
--- /dev/null
+++ 
b/internals/testsupport-internal/src/main/java/org/apache/polygene/test/docker/DelayChecker.java
@@ -0,0 +1,60 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *       http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+package org.apache.polygene.test.docker;
+
+import pl.domzal.junit.docker.rule.wait.StartCondition;
+import pl.domzal.junit.docker.rule.wait.StartConditionCheck;
+
+class DelayChecker
+    implements StartCondition
+{
+
+    private final long millis;
+    private final long doneAt;
+
+    DelayChecker( long millis )
+    {
+        this.millis = millis;
+        this.doneAt = System.currentTimeMillis() + millis;
+    }
+
+    @Override
+    public StartConditionCheck build( pl.domzal.junit.docker.rule.DockerRule 
currentRule )
+    {
+        return new StartConditionCheck()
+        {
+
+            @Override
+            public boolean check()
+            {
+                return System.currentTimeMillis() > doneAt;
+            }
+
+            @Override
+            public String describe()
+            {
+                return String.format( "delay check %d ms", millis );
+            }
+
+            @Override
+            public void after()
+            {
+            }
+        };
+    }
+}

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/a5feec04/internals/testsupport-internal/src/main/java/org/apache/polygene/test/docker/DockerRule.java
----------------------------------------------------------------------
diff --git 
a/internals/testsupport-internal/src/main/java/org/apache/polygene/test/docker/DockerRule.java
 
b/internals/testsupport-internal/src/main/java/org/apache/polygene/test/docker/DockerRule.java
new file mode 100644
index 0000000..18fab0f
--- /dev/null
+++ 
b/internals/testsupport-internal/src/main/java/org/apache/polygene/test/docker/DockerRule.java
@@ -0,0 +1,156 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *       http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+package org.apache.polygene.test.docker;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+import org.junit.rules.TestRule;
+import org.junit.runner.Description;
+import org.junit.runners.model.Statement;
+import pl.domzal.junit.docker.rule.DockerRuleBuilder;
+import pl.domzal.junit.docker.rule.WaitFor;
+import pl.domzal.junit.docker.rule.wait.LineListener;
+import pl.domzal.junit.docker.rule.wait.StartCondition;
+import pl.domzal.junit.docker.rule.wait.StartConditionCheck;
+
+import static java.util.stream.Collectors.joining;
+import static org.junit.Assume.assumeFalse;
+
+public class DockerRule
+    implements TestRule
+{
+    private final boolean dockerDisabled = Boolean.valueOf( 
System.getProperty( "DOCKER_DISABLED", "false" ) );
+    private final pl.domzal.junit.docker.rule.DockerRule dockerRule;
+
+    public DockerRule( String image, int... portsToWaitFor )
+    {
+        this( image, null, WaitFor.tcpPort( portsToWaitFor ) );
+    }
+
+    public DockerRule( String image, String... logMessageSequenceToWaitFor )
+    {
+        this( image, null, WaitFor.logMessageSequence( 
logMessageSequenceToWaitFor ) );
+    }
+
+    public DockerRule( String image, Map<String, String> environment, 
String... logMessageSequnceToWaitFor )
+    {
+        this( image, environment, WaitFor.logMessageSequence( 
logMessageSequnceToWaitFor ) );
+    }
+
+    public DockerRule( String image, Long delay, int... portsToWaitFor )
+    {
+        this( image, null, new DelayChecker( delay ), WaitFor.tcpPort( 
portsToWaitFor ), new DelayChecker( delay ) );
+    }
+
+    public DockerRule( String image, Long delay, String... 
logMessageSequenceToWaitFor )
+    {
+        this( image, null, WaitFor.logMessageSequence( 
logMessageSequenceToWaitFor ), new DelayChecker( delay ) );
+    }
+
+    public DockerRule( String image, Map<String, String> environment, Long 
delay, String... logMessageSequnceToWaitFor )
+    {
+        this( image, environment, WaitFor.logMessageSequence( 
logMessageSequnceToWaitFor ), new DelayChecker( delay ) );
+    }
+
+    public DockerRule( String image, Map<String, String> environment, 
StartCondition... waitFor )
+    {
+        if( environment == null )
+        {
+            environment = Collections.emptyMap();
+        }
+        if( dockerDisabled )
+        {
+            dockerRule = null;
+        }
+        else
+        {
+            DockerRuleBuilder builder = pl.domzal.junit.docker.rule.DockerRule
+                .builder()
+                .imageName( 
"org.apache.polygene:org.apache.polygene.internal.docker-" + image )
+                .publishAllPorts( true )
+                .waitForTimeout( 120 )
+                .waitFor( rule -> new AndChecker( rule, waitFor ) );
+            environment.forEach( builder::env );
+            dockerRule = builder.build();
+        }
+    }
+
+    @Override
+    public Statement apply( Statement base, Description description )
+    {
+        assumeFalse( dockerDisabled );
+        return dockerRule.apply( base, description );
+    }
+
+    public String getDockerHost()
+    {
+        return dockerRule.getDockerHost();
+    }
+
+    public int getExposedContainerPort( String containerPort )
+    {
+        return Integer.valueOf( dockerRule.getExposedContainerPort( 
containerPort ) );
+    }
+
+    public class AndChecker
+        implements StartConditionCheck, LineListener
+    {
+        private List<StartConditionCheck> allOf;
+
+        public AndChecker( pl.domzal.junit.docker.rule.DockerRule rule, 
StartCondition... allOf )
+        {
+            this.allOf = Arrays.stream( allOf ).map( cond -> cond.build( rule 
) ).collect( Collectors.toList() );
+        }
+
+        @Override
+        public boolean check()
+        {
+            return allOf.stream()
+                        .allMatch( StartConditionCheck::check );
+        }
+
+        @Override
+        public String describe()
+        {
+            return allOf.stream()
+                        .map( StartConditionCheck::describe )
+                        .collect( joining( ",", "and(", ")" ) );
+        }
+
+        @Override
+        public void after()
+        {
+            allOf.forEach( StartConditionCheck::after );
+        }
+
+        @Override
+        public void nextLine( String line )
+        {
+            allOf.forEach( listener ->
+                           {
+                               if( listener instanceof LineListener )
+                               {
+                                   ( (LineListener) listener ).nextLine( line 
);
+                               }
+                           } );
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/a5feec04/internals/testsupport-internal/src/main/java/org/apache/polygene/test/docker/package.html
----------------------------------------------------------------------
diff --git 
a/internals/testsupport-internal/src/main/java/org/apache/polygene/test/docker/package.html
 
b/internals/testsupport-internal/src/main/java/org/apache/polygene/test/docker/package.html
new file mode 100644
index 0000000..48031f2
--- /dev/null
+++ 
b/internals/testsupport-internal/src/main/java/org/apache/polygene/test/docker/package.html
@@ -0,0 +1,25 @@
+<!--
+  ~  Licensed to the Apache Software Foundation (ASF) under one
+  ~  or more contributor license agreements.  See the NOTICE file
+  ~  distributed with this work for additional information
+  ~  regarding copyright ownership.  The ASF licenses this file
+  ~  to you under the Apache License, Version 2.0 (the
+  ~  "License"); you may not use this file except in compliance
+  ~  with the License.  You may obtain a copy of the License at
+  ~
+  ~       http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~  Unless required by applicable law or agreed to in writing, software
+  ~  distributed under the License is distributed on an "AS IS" BASIS,
+  ~  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~  See the License for the specific language governing permissions and
+  ~  limitations under the License.
+  ~
+  ~
+-->
+
+<html>
+<body>
+<h1>Polygene Internal Docker TestSupport.</h1>
+</body>
+</html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/a5feec04/settings.gradle
----------------------------------------------------------------------
diff --git a/settings.gradle b/settings.gradle
index 2e91a9f..3c44077 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -99,4 +99,6 @@ include 'core:api',
         'samples:sql-support',
         'samples:swing'
 
+include 'internals:testsupport-internal'
+
 include 'manual', 'reports', 'distributions', 'release'

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/a5feec04/tools/generator-polygene/app/index.js
----------------------------------------------------------------------
diff --git a/tools/generator-polygene/app/index.js 
b/tools/generator-polygene/app/index.js
index f027b6d..cb9d214 100644
--- a/tools/generator-polygene/app/index.js
+++ b/tools/generator-polygene/app/index.js
@@ -128,13 +128,12 @@ module.exports = generators.Base.extend(
                             type: 'list',
                             name: 'dbpool',
                             choices: [
-                                'None',
                                 'BoneCP',
                                 'DBCP'
                                 // 'HikariCP'
                             ],
                             message: 'Which entity store do you want to use?',
-                            default: polygene.dbpool ? polygene.dbpool : 
"None",
+                            default: polygene.dbpool ? polygene.dbpool : 
"DBCP",
                             when: function (answers) {
                                 return answers.entitystore.indexOf('SQL') > -1;
                             }
@@ -210,6 +209,7 @@ module.exports = generators.Base.extend(
                         this.log('Caching:', answers.caching);
                         this.log('Serialization:', answers.serialization);
                         this.log('Features:', answers.features);
+                        answers.dbpool = answers.dbpool === undefined ? "DBCP" 
: answers.dbpool;
                         polygene = answers;
                     }.bind(this)
                 );

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/a5feec04/tools/generator-polygene/app/templates/InfrastructureLayer/IndexingModule/bootstrap.tmpl
----------------------------------------------------------------------
diff --git 
a/tools/generator-polygene/app/templates/InfrastructureLayer/IndexingModule/bootstrap.tmpl
 
b/tools/generator-polygene/app/templates/InfrastructureLayer/IndexingModule/bootstrap.tmpl
index 0b050aa..8f902e9 100644
--- 
a/tools/generator-polygene/app/templates/InfrastructureLayer/IndexingModule/bootstrap.tmpl
+++ 
b/tools/generator-polygene/app/templates/InfrastructureLayer/IndexingModule/bootstrap.tmpl
@@ -25,7 +25,13 @@ import org.apache.polygene.bootstrap.LayerAssembly;
 import org.apache.polygene.bootstrap.ModuleAssembly;
 import org.apache.polygene.bootstrap.layered.ModuleAssembler;
 import org.apache.polygene.index.<%- polygene.indexing.toLowerCase() 
%>.assembly.<%- polygene.indexing %>IndexingAssembler;
-
+<%
+if( polygene.indexing === 'SQL' ) {
+%>import org.apache.polygene.library.sql.assembly.DataSourceAssembler;
+import org.apache.polygene.library.sql.dbcp.DBCPDataSourceServiceAssembler;
+<%
+}
+%>
 public class <%- polygene.indexing %>IndexingModule
     implements ModuleAssembler
 {
@@ -41,7 +47,24 @@ public class <%- polygene.indexing %>IndexingModule
     public ModuleAssembly assemble( LayerAssembly layer, ModuleAssembly module 
)
         throws AssemblyException
     {
-        new <%- polygene.indexing %>IndexingAssembler()
+<% if( polygene.indexing === 'SQL' ) {
+%>        // DataSourceService
+        new DBCPDataSourceServiceAssembler()
+            .identifiedBy( "postgres-index-datasource-service" )
+            .visibleIn( Visibility.module )
+            .withConfig( configModule, Visibility.application )
+            .assemble( module );
+
+        // DataSource (Only Postgresql was supported at the time of generation 
code was written.)
+        new DataSourceAssembler()
+            .withDataSourceServiceIdentity( 
"postgres-index-datasource-service" )
+            .identifiedBy( "ds-index-postgresql" )
+            .visibleIn( Visibility.module )
+            .withCircuitBreaker()
+            .assemble( module );
+<%
+}
+%>        new <%- polygene.indexing %>IndexingAssembler()
             .visibleIn( Visibility.application )
             .identifiedBy( "indexing-<%- polygene.indexing.toLowerCase() %>" )
             .withConfig( configModule, Visibility.application )

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/a5feec04/tools/generator-polygene/app/templates/InfrastructureLayer/IndexingModule/indexing/ds-index-postgresql.properties
----------------------------------------------------------------------
diff --git 
a/tools/generator-polygene/app/templates/InfrastructureLayer/IndexingModule/indexing/ds-index-postgresql.properties
 
b/tools/generator-polygene/app/templates/InfrastructureLayer/IndexingModule/indexing/ds-index-postgresql.properties
new file mode 100644
index 0000000..4097894
--- /dev/null
+++ 
b/tools/generator-polygene/app/templates/InfrastructureLayer/IndexingModule/indexing/ds-index-postgresql.properties
@@ -0,0 +1,23 @@
+#
+#  Licensed to the Apache Software Foundation (ASF) under one
+#  or more contributor license agreements.  See the NOTICE file
+#  distributed with this work for additional information
+#  regarding copyright ownership.  The ASF licenses this file
+#  to you under the Apache License, Version 2.0 (the
+#  "License"); you may not use this file except in compliance
+#  with the License.  You may obtain a copy of the License at
+#
+#       http://www.apache.org/licenses/LICENSE-2.0
+#
+#  Unless required by applicable law or agreed to in writing, software
+#  distributed under the License is distributed on an "AS IS" BASIS,
+#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#  See the License for the specific language governing permissions and
+#  limitations under the License.
+
+
+enabled=true
+url=jdbc:postgres://127.0.0.1:5432/<%= polygene.name %>
+driver=org.postgresql.Driver
+username=polygene
+password=ThisIsGreat!

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/a5feec04/tools/generator-polygene/app/templates/InfrastructureLayer/IndexingModule/indexing/index-rdf.properties
----------------------------------------------------------------------
diff --git 
a/tools/generator-polygene/app/templates/InfrastructureLayer/IndexingModule/indexing/index-rdf.properties
 
b/tools/generator-polygene/app/templates/InfrastructureLayer/IndexingModule/indexing/index-rdf.properties
new file mode 100644
index 0000000..bec1996
--- /dev/null
+++ 
b/tools/generator-polygene/app/templates/InfrastructureLayer/IndexingModule/indexing/index-rdf.properties
@@ -0,0 +1,57 @@
+#
+#  Licensed to the Apache Software Foundation (ASF) under one
+#  or more contributor license agreements.  See the NOTICE file
+#  distributed with this work for additional information
+#  regarding copyright ownership.  The ASF licenses this file
+#  to you under the Apache License, Version 2.0 (the
+#  "License"); you may not use this file except in compliance
+#  with the License.  You may obtain a copy of the License at
+#
+#       http://www.apache.org/licenses/LICENSE-2.0
+#
+#  Unless required by applicable law or agreed to in writing, software
+#  distributed under the License is distributed on an "AS IS" BASIS,
+#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#  See the License for the specific language governing permissions and
+#  limitations under the License.
+
+
+
+# Indexing strategy.
+# s = subject
+# p = predicate
+# o = object
+# c = context
+#
+# These are then combined in groups of "one each" such as "spoc" or "pocs".
+# Multiple groups can be given, in which case multiple indexs will be
+# maintained.
+#
+# This will heavily influence both indexing as well as query times, and one
+# should experiment for optimal performance.
+#
+#
+# @Matches( "([spoc][spoc][spoc][spoc],?)*" )
+# Default:
+#
+# tripleIndexes-
+
+# The location of storing the index.
+#
+# If the FileConfiguration service is available, then the location is set to
+#    fc.dataDirectory() + serviceIdentity
+#
+# Otherwise, if serviceIdentity is null or empty, the location is set to
+#    "./rdf/repositories/polygene"
+#
+# Otherwise, if serviceIdentity is a valid value, the location is set to
+#    "./rdf/repositories/" + serviceIdentity
+#
+#
+# Defaults: <see above>
+# dataDirectory=
+
+# Whether to wait for disk sync.
+#
+# Defaults: false
+# forceSync=

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/a5feec04/tools/generator-polygene/app/templates/InfrastructureLayer/IndexingModule/indexing/solr-schema.xml
----------------------------------------------------------------------
diff --git 
a/tools/generator-polygene/app/templates/InfrastructureLayer/IndexingModule/indexing/solr-schema.xml
 
b/tools/generator-polygene/app/templates/InfrastructureLayer/IndexingModule/indexing/solr-schema.xml
new file mode 100644
index 0000000..d7f70fb
--- /dev/null
+++ 
b/tools/generator-polygene/app/templates/InfrastructureLayer/IndexingModule/indexing/solr-schema.xml
@@ -0,0 +1,606 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  ~  Licensed to the Apache Software Foundation (ASF) under one
+  ~  or more contributor license agreements.  See the NOTICE file
+  ~  distributed with this work for additional information
+  ~  regarding copyright ownership.  The ASF licenses this file
+  ~  to you under the Apache License, Version 2.0 (the
+  ~  "License"); you may not use this file except in compliance
+  ~  with the License.  You may obtain a copy of the License at
+  ~
+  ~       http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~  Unless required by applicable law or agreed to in writing, software
+  ~  distributed under the License is distributed on an "AS IS" BASIS,
+  ~  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~  See the License for the specific language governing permissions and
+  ~  limitations under the License.
+  ~
+  ~
+  -->
+<!--
+ This is the Solr schema file. This file should be named "schema.xml" and
+ should be in the conf directory under the solr home
+ (i.e. ./solr/conf/schema.xml by default)
+ or located where the classloader for the Solr webapp can find it.
+
+ This example schema is the recommended starting point for users.
+ It should be kept correct and concise, usable out-of-the-box.
+
+ For more information, on how to customize this file, please see
+ http://wiki.apache.org/solr/SchemaXml
+
+ PERFORMANCE NOTE: this schema includes many optional features and should not
+ be used for benchmarking.  To improve performance one could
+  - set stored="false" for all fields possible (esp large fields) when you
+    only need to search on the field but don't need to return the original
+    value.
+  - set indexed="false" if you don't need to search on the field, but only
+    return the field as a result of searching on other indexed fields.
+  - remove all unneeded copyField statements
+  - for best index size and searching performance, set "index" to false
+    for all general text fields, use copyField to copy them to the
+    catchall "text" field, and use that for searching.
+  - For maximum indexing performance, use the StreamingUpdateSolrServer
+    java client.
+  - Remember to run the JVM in server mode, and use a higher logging level
+    that avoids logging every request
+-->
+
+<schema name="solrtest" version="1.2">
+    <!-- attribute "name" is the name of this schema and is only used for 
display purposes.
+      Applications should change this to reflect the nature of the search 
collection.
+      version="1.2" is Solr's version number for the schema syntax and 
semantics.  It should
+      not normally be changed by applications.
+      1.0: multiValued attribute did not exist, all fields are multiValued by 
nature
+      1.1: multiValued attribute introduced, false by default
+      1.2: omitTermFreqAndPositions attribute introduced, true by default 
except for text fields.
+    -->
+
+    <types>
+        <!-- field type definitions. The "name" attribute is
+           just a label to be used by field definitions.  The "class"
+           attribute and any other attributes determine the real
+           behavior of the fieldType.
+             Class names starting with "solr" refer to java classes in the
+           org.apache.solr.analysis package.
+        -->
+
+        <!-- The StrField type is not analyzed, but indexed/stored verbatim.
+           - StrField and TextField support an optional compressThreshold which
+           limits compression (if enabled in the derived fields) to values 
which
+           exceed a certain size (in characters).
+        -->
+        <fieldType name="string" class="solr.StrField" sortMissingLast="true" 
omitNorms="true"/>
+        <fieldType name="json" class="solr.StrField"/>
+
+        <!-- boolean type: "true" or "false" -->
+        <fieldType name="boolean" class="solr.BoolField" 
sortMissingLast="true" omitNorms="true"/>
+        <!--Binary data type. The data should be sent/retrieved in as Base64 
encoded Strings -->
+        <fieldtype name="binary" class="solr.BinaryField"/>
+
+        <!-- The optional sortMissingLast and sortMissingFirst attributes are
+             currently supported on types that are sorted internally as 
strings.
+               This includes 
"string","boolean","sint","slong","sfloat","sdouble","pdate"
+           - If sortMissingLast="true", then a sort on this field will cause 
documents
+             without the field to come after documents with the field,
+             regardless of the requested sort order (asc or desc).
+           - If sortMissingFirst="true", then a sort on this field will cause 
documents
+             without the field to come before documents with the field,
+             regardless of the requested sort order.
+           - If sortMissingLast="false" and sortMissingFirst="false" (the 
default),
+             then default lucene sorting will be used which places docs 
without the
+             field first in an ascending sort and last in a descending sort.
+        -->
+
+        <!--
+          Default numeric field types. For faster range queries, consider the 
tint/tfloat/tlong/tdouble types.
+        -->
+        <fieldType name="int" class="solr.TrieIntField" precisionStep="0" 
omitNorms="true" positionIncrementGap="0"/>
+        <fieldType name="float" class="solr.TrieFloatField" precisionStep="0" 
omitNorms="true"
+                   positionIncrementGap="0"/>
+        <fieldType name="long" class="solr.TrieLongField" precisionStep="0" 
omitNorms="true" positionIncrementGap="0"/>
+        <fieldType name="double" class="solr.TrieDoubleField" 
precisionStep="0" omitNorms="true"
+                   positionIncrementGap="0"/>
+
+        <!--
+         Numeric field types that index each value at various levels of 
precision
+         to accelerate range queries when the number of values between the 
range
+         endpoints is large. See the javadoc for NumericRangeQuery for internal
+         implementation details.
+
+         Smaller precisionStep values (specified in bits) will lead to more 
tokens
+         indexed per value, slightly larger index size, and faster range 
queries.
+         A precisionStep of 0 disables indexing at different precision levels.
+        -->
+        <fieldType name="tint" class="solr.TrieIntField" precisionStep="8" 
omitNorms="true" positionIncrementGap="0"/>
+        <fieldType name="tfloat" class="solr.TrieFloatField" precisionStep="8" 
omitNorms="true"
+                   positionIncrementGap="0"/>
+        <fieldType name="tlong" class="solr.TrieLongField" precisionStep="8" 
omitNorms="true" positionIncrementGap="0"/>
+        <fieldType name="tdouble" class="solr.TrieDoubleField" 
precisionStep="8" omitNorms="true"
+                   positionIncrementGap="0"/>
+
+        <!-- The format for this date field is of the form 
1995-12-31T23:59:59Z, and
+           is a more restricted form of the canonical representation of 
dateTime
+           http://www.w3.org/TR/xmlschema-2/#dateTime
+           The trailing "Z" designates UTC time and is mandatory.
+           Optional fractional seconds are allowed: 1995-12-31T23:59:59.999Z
+           All other components are mandatory.
+
+           Expressions can also be used to denote calculations that should be
+           performed relative to "NOW" to determine the value, ie...
+
+                 NOW/HOUR
+                    ... Round to the start of the current hour
+                 NOW-1DAY
+                    ... Exactly 1 day prior to now
+                 NOW/DAY+6MONTHS+3DAYS
+                    ... 6 months and 3 days in the future from the start of
+                        the current day
+
+           Consult the DateField javadocs for more information.
+
+           Note: For faster range queries, consider the tdate type
+        -->
+        <fieldType name="date" class="solr.TrieDateField" omitNorms="true" 
precisionStep="0" positionIncrementGap="0"/>
+
+        <!-- A Trie based date field for faster date range queries and date 
faceting. -->
+        <fieldType name="tdate" class="solr.TrieDateField" omitNorms="true" 
precisionStep="6" positionIncrementGap="0"/>
+
+
+        <!--
+          Note:
+          These should only be used for compatibility with existing indexes 
(created with older Solr versions)
+          or if "sortMissingFirst" or "sortMissingLast" functionality is 
needed. Use Trie based fields instead.
+
+          Plain numeric field types that store and index the text
+          value verbatim (and hence don't support range queries, since the
+          lexicographic ordering isn't equal to the numeric ordering)
+        -->
+        <fieldType name="pint" class="solr.IntField" omitNorms="true"/>
+        <fieldType name="plong" class="solr.LongField" omitNorms="true"/>
+        <fieldType name="pfloat" class="solr.FloatField" omitNorms="true"/>
+        <fieldType name="pdouble" class="solr.DoubleField" omitNorms="true"/>
+        <fieldType name="pdate" class="solr.DateField" sortMissingLast="true" 
omitNorms="true"/>
+
+
+        <!--
+          Note:
+          These should only be used for compatibility with existing indexes 
(created with older Solr versions)
+          or if "sortMissingFirst" or "sortMissingLast" functionality is 
needed. Use Trie based fields instead.
+
+          Numeric field types that manipulate the value into
+          a string value that isn't human-readable in its internal form,
+          but with a lexicographic ordering the same as the numeric ordering,
+          so that range queries work correctly.
+        -->
+        <fieldType name="sint" class="solr.SortableIntField" 
sortMissingLast="true" omitNorms="true"/>
+        <fieldType name="slong" class="solr.SortableLongField" 
sortMissingLast="true" omitNorms="true"/>
+        <fieldType name="sfloat" class="solr.SortableFloatField" 
sortMissingLast="true" omitNorms="true"/>
+        <fieldType name="sdouble" class="solr.SortableDoubleField" 
sortMissingLast="true" omitNorms="true"/>
+
+
+        <!-- The "RandomSortField" is not used to store or search any
+            data.  You can declare fields of this type it in your schema
+            to generate pseudo-random orderings of your docs for sorting
+            purposes.  The ordering is generated based on the field name
+            and the version of the index, As long as the index version
+            remains unchanged, and the same field name is reused,
+            the ordering of the docs will be consistent.
+            If you want different psuedo-random orderings of documents,
+            for the same version of the index, use a dynamicField and
+            change the name
+        -->
+        <fieldType name="random" class="solr.RandomSortField" indexed="true"/>
+
+        <!-- solr.TextField allows the specification of custom text analyzers
+            specified as a tokenizer and a list of token filters. Different
+            analyzers may be specified for indexing and querying.
+
+            The optional positionIncrementGap puts space between multiple 
fields of
+            this type on the same document, with the purpose of preventing 
false phrase
+            matching across fields.
+
+            For more info on customizing your analyzer chain, please see
+            http://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters
+        -->
+
+        <!-- One can also specify an existing Analyzer class that has a
+             default constructor via the class attribute on the analyzer 
element
+        <fieldType name="text_greek" class="solr.TextField">
+          <analyzer class="org.apache.lucene.analysis.el.GreekAnalyzer"/>
+        </fieldType>
+        -->
+
+        <!-- A text field that only splits on whitespace for exact matching of 
words -->
+        <fieldType name="text_ws" class="solr.TextField" 
positionIncrementGap="100">
+            <analyzer>
+                <tokenizer class="solr.WhitespaceTokenizerFactory"/>
+            </analyzer>
+        </fieldType>
+
+        <!-- A text field that uses WordDelimiterFilter to enable splitting 
and matching of
+        words on case-change, alpha numeric boundaries, and non-alphanumeric 
chars,
+        so that a query of "wifi" or "wi fi" could match a document containing 
"Wi-Fi".
+        Synonyms and stopwords are customized by external files, and stemming 
is enabled.
+        -->
+        <fieldType name="text" class="solr.TextField" 
positionIncrementGap="100">
+            <analyzer type="index">
+                <tokenizer class="solr.WhitespaceTokenizerFactory"/>
+                <!-- in this example, we will only use synonyms at query time
+                <filter class="solr.SynonymFilterFactory" 
synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/>
+                -->
+                <!-- Case insensitive stop word removal.
+                  add enablePositionIncrements=true in both the index and query
+                  analyzers to leave a 'gap' for more accurate phrase queries.
+                -->
+                <!--        <filter class="solr.StopFilterFactory"
+               ignoreCase="true"
+               words="stopwords.txt"
+               enablePositionIncrements="true"
+               /> -->
+                <filter class="solr.WordDelimiterFilterFactory" 
generateWordParts="1" generateNumberParts="1"
+                        catenateWords="1" catenateNumbers="1" catenateAll="0" 
splitOnCaseChange="1"/>
+                <filter class="solr.LowerCaseFilterFactory"/>
+                <!--        <filter class="solr.SnowballPorterFilterFactory" 
language="English" protected="protwords.txt"/> -->
+            </analyzer>
+            <analyzer type="query">
+                <tokenizer class="solr.WhitespaceTokenizerFactory"/>
+                <!--        <filter class="solr.SynonymFilterFactory" 
synonyms="synonyms.txt" ignoreCase="true" expand="true"/> -->
+                <!--        <filter class="solr.StopFilterFactory"
+               ignoreCase="true"
+               words="stopwords.txt"
+               enablePositionIncrements="true"
+               /> -->
+                <filter class="solr.WordDelimiterFilterFactory" 
generateWordParts="1" generateNumberParts="1"
+                        catenateWords="0" catenateNumbers="0" catenateAll="0" 
splitOnCaseChange="1"/>
+                <filter class="solr.LowerCaseFilterFactory"/>
+                <!--        <filter class="solr.SnowballPorterFilterFactory" 
language="English" protected="protwords.txt"/> -->
+            </analyzer>
+        </fieldType>
+
+        <fieldType name="phone" class="solr.TextField" 
positionIncrementGap="100">
+            <analyzer type="index">
+                <tokenizer 
class="org.apache.polygene.index.solr.internal.SingleTokenTokenizerFactory"/>
+                <filter class="solr.WordDelimiterFilterFactory" 
generateWordParts="0" generateNumberParts="0"
+                        catenateWords="1" catenateNumbers="1" catenateAll="0" 
splitOnCaseChange="0"/>
+            </analyzer>
+            <analyzer type="query">
+                <tokenizer 
class="org.apache.polygene.index.solr.internal.SingleTokenTokenizerFactory"/>
+                <filter class="solr.WordDelimiterFilterFactory" 
generateWordParts="0" generateNumberParts="0"
+                        catenateWords="1" catenateNumbers="1" catenateAll="0" 
splitOnCaseChange="0"/>
+            </analyzer>
+        </fieldType>
+
+
+        <!-- Less flexible matching, but less false matches.  Probably not 
ideal for product names,
+but may be good for SKUs.  Can insert dashes in the wrong place and still 
match. -->
+        <fieldType name="textTight" class="solr.TextField" 
positionIncrementGap="100">
+            <analyzer>
+                <tokenizer class="solr.WhitespaceTokenizerFactory"/>
+                <!--        <filter class="solr.SynonymFilterFactory" 
synonyms="synonyms.txt" ignoreCase="true" expand="false"/>
+            <filter class="solr.StopFilterFactory" ignoreCase="true" 
words="stopwords.txt"/> -->
+                <filter class="solr.WordDelimiterFilterFactory" 
generateWordParts="0" generateNumberParts="0"
+                        catenateWords="1" catenateNumbers="1" catenateAll="0"/>
+                <filter class="solr.LowerCaseFilterFactory"/>
+                <!--        <filter class="solr.SnowballPorterFilterFactory" 
language="English" protected="protwords.txt"/> -->
+                <!-- this filter can remove any duplicate tokens that appear 
at the same position - sometimes
+         possible with WordDelimiterFilter in conjuncton with stemming. -->
+                <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
+            </analyzer>
+        </fieldType>
+
+
+        <!-- A general unstemmed text field - good if one does not know the 
language of the field -->
+        <fieldType name="textgen" class="solr.TextField" 
positionIncrementGap="100">
+            <analyzer type="index">
+                <tokenizer class="solr.WhitespaceTokenizerFactory"/>
+                <!--        <filter class="solr.StopFilterFactory" 
ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" /> -->
+                <filter class="solr.WordDelimiterFilterFactory" 
generateWordParts="1" generateNumberParts="1"
+                        catenateWords="1" catenateNumbers="1" catenateAll="0" 
splitOnCaseChange="0"/>
+                <filter class="solr.LowerCaseFilterFactory"/>
+            </analyzer>
+            <analyzer type="query">
+                <tokenizer class="solr.WhitespaceTokenizerFactory"/>
+                <!--        <filter class="solr.SynonymFilterFactory" 
synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
+       <filter class="solr.StopFilterFactory"
+               ignoreCase="true"
+               words="stopwords.txt"
+               enablePositionIncrements="true"
+               /> -->
+                <filter class="solr.WordDelimiterFilterFactory" 
generateWordParts="1" generateNumberParts="1"
+                        catenateWords="0" catenateNumbers="0" catenateAll="0" 
splitOnCaseChange="0"/>
+                <filter class="solr.LowerCaseFilterFactory"/>
+            </analyzer>
+        </fieldType>
+
+
+        <!-- A general unstemmed text field that indexes tokens normally and 
also
+           reversed (via ReversedWildcardFilterFactory), to enable more 
efficient
+       leading wildcard queries. -->
+        <fieldType name="text_rev" class="solr.TextField" 
positionIncrementGap="100">
+            <analyzer type="index">
+                <tokenizer class="solr.WhitespaceTokenizerFactory"/>
+                <!--        <filter class="solr.StopFilterFactory" 
ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" /> -->
+                <filter class="solr.WordDelimiterFilterFactory" 
generateWordParts="1" generateNumberParts="1"
+                        catenateWords="1" catenateNumbers="1" catenateAll="0" 
splitOnCaseChange="0"/>
+                <filter class="solr.LowerCaseFilterFactory"/>
+                <filter class="solr.ReversedWildcardFilterFactory" 
withOriginal="true"
+                        maxPosAsterisk="3" maxPosQuestion="2" 
maxFractionAsterisk="0.33"/>
+            </analyzer>
+            <analyzer type="query">
+                <tokenizer class="solr.WhitespaceTokenizerFactory"/>
+                <!--        <filter class="solr.SynonymFilterFactory" 
synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
+       <filter class="solr.StopFilterFactory"
+               ignoreCase="true"
+               words="stopwords.txt"
+               enablePositionIncrements="true"
+               /> -->
+                <filter class="solr.WordDelimiterFilterFactory" 
generateWordParts="1" generateNumberParts="1"
+                        catenateWords="0" catenateNumbers="0" catenateAll="0" 
splitOnCaseChange="0"/>
+                <filter class="solr.LowerCaseFilterFactory"/>
+            </analyzer>
+        </fieldType>
+
+        <!-- charFilter + WhitespaceTokenizer  -->
+        <!--
+        <fieldType name="textCharNorm" class="solr.TextField" 
positionIncrementGap="100" >
+          <analyzer>
+            <charFilter class="solr.MappingCharFilterFactory" 
mapping="mapping-ISOLatin1Accent.txt"/>
+            <tokenizer class="solr.WhitespaceTokenizerFactory"/>
+          </analyzer>
+        </fieldType>
+        -->
+
+        <!-- This is an example of using the KeywordTokenizer along
+           With various TokenFilterFactories to produce a sortable field
+           that does not include some properties of the source text
+        -->
+        <fieldType name="alphaOnlySort" class="solr.TextField" 
sortMissingLast="true" omitNorms="true">
+            <analyzer>
+                <!-- KeywordTokenizer does no actual tokenizing, so the entire
+                   input string is preserved as a single token
+                -->
+                <tokenizer class="solr.KeywordTokenizerFactory"/>
+                <!-- The LowerCase TokenFilter does what you expect, which can 
be
+                   when you want your sorting to be case insensitive
+                -->
+                <filter class="solr.LowerCaseFilterFactory"/>
+                <!-- The TrimFilter removes any leading or trailing whitespace 
-->
+                <filter class="solr.TrimFilterFactory"/>
+                <!-- The PatternReplaceFilter gives you the flexibility to use
+                   Java Regular expression to replace any sequence of 
characters
+                   matching a pattern with an arbitrary replacement string,
+                   which may include back references to portions of the 
original
+                   string matched by the pattern.
+
+                   See the Java Regular Expression documentation for more
+                   information on pattern and replacement string syntax.
+
+                   
http://java.sun.com/j2se/1.5.0/docs/api/java/util/regex/package-summary.html
+                -->
+                <filter class="solr.PatternReplaceFilterFactory"
+                        pattern="([^a-z])" replacement="" replace="all"
+                        />
+            </analyzer>
+        </fieldType>
+
+        <fieldtype name="phonetic" stored="false" indexed="true" 
class="solr.TextField">
+            <analyzer>
+                <tokenizer class="solr.StandardTokenizerFactory"/>
+                <filter class="solr.DoubleMetaphoneFilterFactory" 
inject="false"/>
+            </analyzer>
+        </fieldtype>
+
+        <fieldtype name="payloads" stored="false" indexed="true" 
class="solr.TextField">
+            <analyzer>
+                <tokenizer class="solr.WhitespaceTokenizerFactory"/>
+                <!--
+               The DelimitedPayloadTokenFilter can put payloads on tokens... 
for example,
+               a token of "foo|1.4"  would be indexed as "foo" with a payload 
of 1.4f
+               Attributes of the DelimitedPayloadTokenFilterFactory :
+                "delimiter" - a one character delimiter. Default is | (pipe)
+            "encoder" - how to encode the following value into a playload
+               float -> org.apache.lucene.analysis.payloads.FloatEncoder,
+               integer -> o.a.l.a.p.IntegerEncoder
+               reference -> o.a.l.a.p.IdentityEncoder
+                   Fully Qualified class name implementing PayloadEncoder, 
Encoder must have a no arg constructor.
+                -->
+                <filter class="solr.DelimitedPayloadTokenFilterFactory" 
encoder="float"/>
+            </analyzer>
+        </fieldtype>
+
+        <!-- lowercases the entire field value, keeping it as a single token.  
-->
+        <fieldType name="lowercase" class="solr.TextField" 
positionIncrementGap="100">
+            <analyzer>
+                <tokenizer class="solr.KeywordTokenizerFactory"/>
+                <filter class="solr.LowerCaseFilterFactory"/>
+            </analyzer>
+        </fieldType>
+
+
+        <!-- since fields of this type are by default not stored or indexed,
+any data added to them will be ignored outright.  -->
+        <fieldtype name="ignored" stored="false" indexed="false" 
multiValued="true" class="solr.StrField"/>
+
+    </types>
+
+
+    <fields>
+        <!-- Valid attributes for fields:
+          name: mandatory - the name for the field
+          type: mandatory - the name of a previously defined type from the
+            <types> section
+          indexed: true if this field should be indexed (searchable or 
sortable)
+          stored: true if this field should be retrievable
+          compressed: [false] if this field should be stored using gzip 
compression
+            (this will only apply if the field type is compressable; among
+            the standard field types, only TextField and StrField are)
+          multiValued: true if this field may contain multiple values per 
document
+          omitNorms: (expert) set to true to omit the norms associated with
+            this field (this disables length normalization and index-time
+            boosting for the field, and saves some memory).  Only full-text
+            fields or fields that need an index-time boost need norms.
+          termVectors: [false] set to true to store the term vector for a
+            given field.
+            When using MoreLikeThis, fields used for similarity should be
+            stored for best performance.
+          termPositions: Store position information with the term vector.
+            This will increase storage costs.
+          termOffsets: Store offset information with the term vector. This
+            will increase storage costs.
+          default: a value that should be used if no value is specified
+            when adding a document.
+        -->
+
+        <!-- Standard entity fields -->
+        <field name="id" type="string" indexed="true" stored="true" 
required="true"/>
+        <field name="lastModified" type="date" indexed="true" stored="true" 
required="true"/>
+        <field name="type" type="string" indexed="true" stored="true" 
required="true"/>
+
+        <!-- Solr test lucene index fields. Replace this with 
application-specific fields -->
+        <field name="name" type="text" indexed="true" stored="true" 
multiValued="false"/>
+
+        <!--
+        <field name="sku" type="textTight" indexed="true" stored="true" 
omitNorms="true"/>
+        <field name="name" type="textgen" indexed="true" stored="true"/>
+        <field name="alphaNameSort" type="alphaOnlySort" indexed="true" 
stored="false"/>
+        <field name="manu" type="textgen" indexed="true" stored="true" 
omitNorms="true"/>
+        <field name="cat" type="text_ws" indexed="true" stored="true" 
multiValued="true" omitNorms="true" />
+        <field name="features" type="text" indexed="true" stored="true" 
multiValued="true"/>
+        <field name="includes" type="text" indexed="true" stored="true" 
termVectors="true" termPositions="true" termOffsets="true" />
+
+        <field name="weight" type="float" indexed="true" stored="true"/>
+        <field name="price"  type="float" indexed="true" stored="true"/>
+        <field name="popularity" type="int" indexed="true" stored="true" />
+        <field name="inStock" type="boolean" indexed="true" stored="true" />
+        -->
+
+        <!-- Common metadata fields, named specifically to match up with
+          SolrCell metadata when parsing rich documents such as Word, PDF.
+          Some fields are multiValued only because Tika currently may return
+          multiple values for them.
+        -->
+        <!--
+        <field name="title" type="text" indexed="true" stored="true" 
multiValued="true"/>
+        <field name="subject" type="text" indexed="true" stored="true"/>
+        <field name="description" type="text" indexed="true" stored="true"/>
+        <field name="comments" type="text" indexed="true" stored="true"/>
+        <field name="author" type="textgen" indexed="true" stored="true"/>
+        <field name="keywords" type="textgen" indexed="true" stored="true"/>
+        <field name="category" type="textgen" indexed="true" stored="true"/>
+        <field name="content_type" type="string" indexed="true" stored="true" 
multiValued="true"/>
+        <field name="last_modified" type="date" indexed="true" stored="true"/>
+        <field name="links" type="string" indexed="true" stored="true" 
multiValued="true"/>
+        -->
+
+        <!-- catchall field, containing all other searchable text fields 
(implemented
+via copyField further on in this schema  -->
+        <field name="text" type="text" indexed="true" stored="false" 
multiValued="true"/>
+
+        <!-- catchall text field that indexes tokens both normally and in 
reverse for efficient
+     leading wildcard queries. -->
+        <field name="text_rev" type="text_rev" indexed="true" stored="false" 
multiValued="true"/>
+
+        <!-- non-tokenized version of manufacturer to make it easier to sort 
or group
+results by manufacturer.  copied from "manu" via copyField -->
+        <!--<field name="manu_exact" type="string" indexed="true" 
stored="false"/> -->
+
+        <!-- <field name="payloads" type="payloads" indexed="true" 
stored="true"/> -->
+
+        <!-- Uncommenting the following will create a "timestamp" field using
+           a default value of "NOW" to indicate when each document was indexed.
+        -->
+        <!--
+      <field name="timestamp" type="date" indexed="true" stored="true" 
default="NOW" multiValued="false"/>
+        -->
+
+
+        <!-- Dynamic field definitions.  If a field name is not found, 
dynamicFields
+will be used if the name matches any of the patterns.
+RESTRICTION: the glob-like pattern in the name attribute must have
+a "*" only at the start or the end.
+EXAMPLE:  name="*_i" will match any field ending in _i (like myid_i, z_i)
+Longer patterns will be matched first.  if equal size patterns
+both match, the first appearing in the schema will be used.  -->
+        <dynamicField name="*_i" type="int" indexed="true" stored="true"/>
+        <dynamicField name="*_s" type="string" indexed="true" stored="true"/>
+        <dynamicField name="*_l" type="long" indexed="true" stored="true"/>
+        <dynamicField name="*_t" type="text" indexed="true" stored="true"/>
+        <dynamicField name="*_b" type="boolean" indexed="true" stored="true"/>
+        <dynamicField name="*_f" type="float" indexed="true" stored="true"/>
+        <dynamicField name="*_d" type="double" indexed="true" stored="true"/>
+        <dynamicField name="*_dt" type="date" indexed="true" stored="true"/>
+
+        <!-- some trie-coded dynamic fields for faster range queries -->
+        <dynamicField name="*_ti" type="tint" indexed="true" stored="true"/>
+        <dynamicField name="*_tl" type="tlong" indexed="true" stored="true"/>
+        <dynamicField name="*_tf" type="tfloat" indexed="true" stored="true"/>
+        <dynamicField name="*_td" type="tdouble" indexed="true" stored="true"/>
+        <dynamicField name="*_tdt" type="tdate" indexed="true" stored="true"/>
+
+        <dynamicField name="*_pi" type="pint" indexed="true" stored="true"/>
+
+        <dynamicField name="ignored_*" type="ignored" multiValued="true"/>
+        <dynamicField name="attr_*" type="textgen" indexed="true" 
stored="true" multiValued="true"/>
+
+        <dynamicField name="random_*" type="random"/>
+
+        <!-- uncomment the following to ignore any fields that don't already 
match an existing
+ field name or dynamic field, rather than reporting them as an error.
+ alternately, change the type="ignored" to some other type e.g. "text" if you 
want
+ unknown fields indexed and/or stored by default -->
+        <!--dynamicField name="*" type="ignored" multiValued="true" /-->
+
+    </fields>
+
+    <!-- Field to use to determine and enforce document uniqueness.
+       Unless this field is marked with required="false", it will be a 
required field
+    -->
+    <uniqueKey>id</uniqueKey>
+
+    <!-- field for the QueryParser to use when an explicit fieldname is absent 
-->
+    <defaultSearchField>text</defaultSearchField>
+
+    <!-- SolrQueryParser configuration: defaultOperator="AND|OR" -->
+    <solrQueryParser defaultOperator="AND"/>
+
+    <!-- copyField commands copy one field to another at the time a document
+is added to the index.  It's used either to index the same field differently,
+or to add multiple fields to the same field for easier/faster searching.  -->
+
+    <copyField source="name" dest="text"/>
+
+    <!--
+    <copyField source="manu" dest="text"/>
+    <copyField source="features" dest="text"/>
+    <copyField source="includes" dest="text"/>
+    <copyField source="manu" dest="manu_exact"/>
+    -->
+    <!-- Above, multiple source fields are copied to the [text] field.
+       Another way to map multiple source fields to the same
+       destination field is to use the dynamic field syntax.
+       copyField also supports a maxChars to copy setting.  -->
+
+    <!-- <copyField source="*_t" dest="text" maxChars="3000"/> -->
+
+    <!-- copy name to alphaNameSort, a field designed for sorting by name -->
+    <!-- <copyField source="name" dest="alphaNameSort"/> -->
+
+
+    <!-- Similarity is the scoring routine for each document vs. a query.
+A custom similarity may be specified here, but the default is fine
+for most applications.  -->
+    <!-- <similarity class="org.apache.lucene.search.DefaultSimilarity"/> -->
+    <!-- ... OR ...
+         Specify a SimilarityFactory class name implementation
+         allowing parameters to be used.
+    -->
+    <!--
+    <similarity class="com.example.solr.CustomSimilarityFactory">
+      <str name="paramkey">param value</str>
+    </similarity>
+    -->
+
+
+</schema>

Reply via email to