adding files to support solr
This commit is contained in:
parent
74508d8da0
commit
994458a5cd
19 changed files with 2810 additions and 0 deletions
1
solr/README.txt
Normal file
1
solr/README.txt
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Vitro depends on solr. This directory provides a basic installation of solr to be used along side vitro.
|
BIN
solr/apache-solr-1.4.1.war
Normal file
BIN
solr/apache-solr-1.4.1.war
Normal file
Binary file not shown.
91
solr/build.xml
Normal file
91
solr/build.xml
Normal file
|
@ -0,0 +1,91 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
|
||||||
|
<!-- $This file is distributed under the terms of the license in /doc/license.txt$ -->
|
||||||
|
|
||||||
|
<!-- ===========================================
|
||||||
|
Deploy script for basic solr webapp for use by a vitro webapp.
|
||||||
|
Vitro should be deployed before this script is run.
|
||||||
|
=========================================== -->
|
||||||
|
|
||||||
|
<project name="vitroSolr" default="describe">
|
||||||
|
|
||||||
|
<property name="solr.build.dir" location="."/>
|
||||||
|
<property name="solr.example.dir" location="${solr.build.dir}/exampleSolr" />
|
||||||
|
<property name="solr.context.config.example" location="${solr.build.dir}/exampleSolrContext.xml"/>
|
||||||
|
<property name="solr.war" location="${solr.build.dir}/apache-solr-1.4.1.war"/>
|
||||||
|
|
||||||
|
<property name="deploy.properties.file" location="???"/>
|
||||||
|
|
||||||
|
<!-- =================================
|
||||||
|
target: describe
|
||||||
|
================================= -->
|
||||||
|
|
||||||
|
<target name="describe" description="--> Describe the targets (this is the default).">
|
||||||
|
<echo>
|
||||||
|
deploy - Deploy solr service for use by vitro.
|
||||||
|
</echo>
|
||||||
|
</target>
|
||||||
|
|
||||||
|
<!-- =================================
|
||||||
|
target: deploy
|
||||||
|
================================= -->
|
||||||
|
|
||||||
|
<target name="deploy" depends="properties" description="Deploy solr service for use by vitro.">
|
||||||
|
<property name="solr.home" location="${Vitro.home.directory}/solr"/>
|
||||||
|
<property name="solr.docbase" location="${solr.home}/solr.war"/>
|
||||||
|
<property name="solr.context.name" value="${webapp.name}solr"/>
|
||||||
|
<property name="solr.context.config" location="${solr.home}/${solr.context.name}.xml"/>
|
||||||
|
|
||||||
|
<!-- Create and copy the example directory to the solr.home directory. -->
|
||||||
|
<mkdir dir="${solr.home}"/>
|
||||||
|
<copy todir="${solr.home}">
|
||||||
|
<fileset dir="${solr.example.dir}" includes="**/*"/>
|
||||||
|
</copy>
|
||||||
|
|
||||||
|
<!-- Add the war file. -->
|
||||||
|
<copy todir="${solr.docbase}">
|
||||||
|
<fileset file="${solr.war}"/>
|
||||||
|
</copy>
|
||||||
|
|
||||||
|
<!-- Create the context configuration XML with expanded properties. -->
|
||||||
|
<copy tofile="${solr.context.config}" filtering="true">
|
||||||
|
<fileset file="${solr.context.config.example}"/>
|
||||||
|
<filterchain>
|
||||||
|
<expandproperties />
|
||||||
|
</filterchain>
|
||||||
|
</copy>
|
||||||
|
|
||||||
|
<!-- Place context configuration XML in tomcat config directory. -->
|
||||||
|
<copy tofile="${tomcat.home}/conf/Catalina/localhost">
|
||||||
|
<fileset file="${solr.context.config}"/>
|
||||||
|
</copy>
|
||||||
|
|
||||||
|
</target>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- - - - - - - - - - - - - - - - - -
|
||||||
|
target: properties
|
||||||
|
- - - - - - - - - - - - - - - - - -->
|
||||||
|
<target name="properties">
|
||||||
|
<property name="deploy.properties.file" location="deploy.properties" />
|
||||||
|
<fail message="You must create a "${deploy.properties.file}" file.">
|
||||||
|
<condition>
|
||||||
|
<not>
|
||||||
|
<available file="${deploy.properties.file}" />
|
||||||
|
</not>
|
||||||
|
</condition>
|
||||||
|
</fail>
|
||||||
|
|
||||||
|
<property file="${deploy.properties.file}" />
|
||||||
|
|
||||||
|
<fail unless="tomcat.home"
|
||||||
|
message="${deploy.properties.file} must contain a value for tomcat.home" />
|
||||||
|
<fail unless="webapp.name"
|
||||||
|
message="${deploy.properties.file} must contain a value for webapp.name" />
|
||||||
|
<fail unless="Vitro.home.directory"
|
||||||
|
message="${deploy.properties.file} must contain a value for Vitro.home.directory"/>
|
||||||
|
|
||||||
|
</target>
|
||||||
|
|
||||||
|
|
||||||
|
</project>
|
54
solr/exampleSolr/README.txt
Normal file
54
solr/exampleSolr/README.txt
Normal file
|
@ -0,0 +1,54 @@
|
||||||
|
# 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.
|
||||||
|
|
||||||
|
|
||||||
|
Example "Solr Home" Directory
|
||||||
|
=============================
|
||||||
|
|
||||||
|
This directory is provided as an example of what a "Solr Home" directory
|
||||||
|
should look like.
|
||||||
|
|
||||||
|
It's not strictly necessary that you copy all of the files in this
|
||||||
|
directory when setting up a new instance of Solr, but it is recommended.
|
||||||
|
|
||||||
|
|
||||||
|
Basic Directory Structure
|
||||||
|
-------------------------
|
||||||
|
|
||||||
|
The Solr Home directory typically contains the following subdirectories...
|
||||||
|
|
||||||
|
conf/
|
||||||
|
This directory is mandatory and must contain your solrconfig.xml
|
||||||
|
and schema.xml. Any other optional configuration files would also
|
||||||
|
be kept here.
|
||||||
|
|
||||||
|
data/
|
||||||
|
This directory is the default location where Solr will keep your
|
||||||
|
index, and is used by the replication scripts for dealing with
|
||||||
|
snapshots. You can override this location in the solrconfig.xml
|
||||||
|
and scripts.conf files. Solr will create this directory if it
|
||||||
|
does not already exist.
|
||||||
|
|
||||||
|
lib/
|
||||||
|
This directory is optional. If it exists, Solr will load any Jars
|
||||||
|
found in this directory and use them to resolve any "plugins"
|
||||||
|
specified in your solrconfig.xml or schema.xml (ie: Analyzers,
|
||||||
|
Request Handlers, etc...). Alternatively you can use the <lib>
|
||||||
|
syntax in solrconfig.xml to direct Solr to your plugins. See the
|
||||||
|
example solrconfig.xml file for details.
|
||||||
|
|
||||||
|
bin/
|
||||||
|
This directory is optional. It is the default location used for
|
||||||
|
keeping the replication scripts.
|
31
solr/exampleSolr/conf/admin-extra.html
Normal file
31
solr/exampleSolr/conf/admin-extra.html
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
<!--
|
||||||
|
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.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!-- The content of this page will be statically included into the top
|
||||||
|
of the admin page. Uncomment this as an example to see there the content
|
||||||
|
will show up.
|
||||||
|
|
||||||
|
<hr>
|
||||||
|
<i>This line will appear before the first table</i>
|
||||||
|
<tr>
|
||||||
|
<td colspan="2">
|
||||||
|
This row will be appended to the end of the first table
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<hr>
|
||||||
|
|
||||||
|
-->
|
36
solr/exampleSolr/conf/elevate.xml
Normal file
36
solr/exampleSolr/conf/elevate.xml
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
<?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.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!-- If this file is found in the config directory, it will only be
|
||||||
|
loaded once at startup. If it is found in Solr's data
|
||||||
|
directory, it will be re-loaded every commit.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<elevate>
|
||||||
|
<query text="foo bar">
|
||||||
|
<doc id="1" />
|
||||||
|
<doc id="2" />
|
||||||
|
<doc id="3" />
|
||||||
|
</query>
|
||||||
|
|
||||||
|
<query text="ipod">
|
||||||
|
<doc id="MA147LL/A" /> <!-- put the actual ipod at the top -->
|
||||||
|
<doc id="IW-02" exclude="true" /> <!-- exclude this cable -->
|
||||||
|
</query>
|
||||||
|
|
||||||
|
</elevate>
|
246
solr/exampleSolr/conf/mapping-ISOLatin1Accent.txt
Normal file
246
solr/exampleSolr/conf/mapping-ISOLatin1Accent.txt
Normal file
|
@ -0,0 +1,246 @@
|
||||||
|
# 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.
|
||||||
|
|
||||||
|
# Syntax:
|
||||||
|
# "source" => "target"
|
||||||
|
# "source".length() > 0 (source cannot be empty.)
|
||||||
|
# "target".length() >= 0 (target can be empty.)
|
||||||
|
|
||||||
|
# example:
|
||||||
|
# "À" => "A"
|
||||||
|
# "\u00C0" => "A"
|
||||||
|
# "\u00C0" => "\u0041"
|
||||||
|
# "ß" => "ss"
|
||||||
|
# "\t" => " "
|
||||||
|
# "\n" => ""
|
||||||
|
|
||||||
|
# À => A
|
||||||
|
"\u00C0" => "A"
|
||||||
|
|
||||||
|
# Á => A
|
||||||
|
"\u00C1" => "A"
|
||||||
|
|
||||||
|
# Â => A
|
||||||
|
"\u00C2" => "A"
|
||||||
|
|
||||||
|
# Ã => A
|
||||||
|
"\u00C3" => "A"
|
||||||
|
|
||||||
|
# Ä => A
|
||||||
|
"\u00C4" => "A"
|
||||||
|
|
||||||
|
# Å => A
|
||||||
|
"\u00C5" => "A"
|
||||||
|
|
||||||
|
# Æ => AE
|
||||||
|
"\u00C6" => "AE"
|
||||||
|
|
||||||
|
# Ç => C
|
||||||
|
"\u00C7" => "C"
|
||||||
|
|
||||||
|
# È => E
|
||||||
|
"\u00C8" => "E"
|
||||||
|
|
||||||
|
# É => E
|
||||||
|
"\u00C9" => "E"
|
||||||
|
|
||||||
|
# Ê => E
|
||||||
|
"\u00CA" => "E"
|
||||||
|
|
||||||
|
# Ë => E
|
||||||
|
"\u00CB" => "E"
|
||||||
|
|
||||||
|
# Ì => I
|
||||||
|
"\u00CC" => "I"
|
||||||
|
|
||||||
|
# Í => I
|
||||||
|
"\u00CD" => "I"
|
||||||
|
|
||||||
|
# Î => I
|
||||||
|
"\u00CE" => "I"
|
||||||
|
|
||||||
|
# Ï => I
|
||||||
|
"\u00CF" => "I"
|
||||||
|
|
||||||
|
# IJ => IJ
|
||||||
|
"\u0132" => "IJ"
|
||||||
|
|
||||||
|
# Ð => D
|
||||||
|
"\u00D0" => "D"
|
||||||
|
|
||||||
|
# Ñ => N
|
||||||
|
"\u00D1" => "N"
|
||||||
|
|
||||||
|
# Ò => O
|
||||||
|
"\u00D2" => "O"
|
||||||
|
|
||||||
|
# Ó => O
|
||||||
|
"\u00D3" => "O"
|
||||||
|
|
||||||
|
# Ô => O
|
||||||
|
"\u00D4" => "O"
|
||||||
|
|
||||||
|
# Õ => O
|
||||||
|
"\u00D5" => "O"
|
||||||
|
|
||||||
|
# Ö => O
|
||||||
|
"\u00D6" => "O"
|
||||||
|
|
||||||
|
# Ø => O
|
||||||
|
"\u00D8" => "O"
|
||||||
|
|
||||||
|
# Œ => OE
|
||||||
|
"\u0152" => "OE"
|
||||||
|
|
||||||
|
# Þ
|
||||||
|
"\u00DE" => "TH"
|
||||||
|
|
||||||
|
# Ù => U
|
||||||
|
"\u00D9" => "U"
|
||||||
|
|
||||||
|
# Ú => U
|
||||||
|
"\u00DA" => "U"
|
||||||
|
|
||||||
|
# Û => U
|
||||||
|
"\u00DB" => "U"
|
||||||
|
|
||||||
|
# Ü => U
|
||||||
|
"\u00DC" => "U"
|
||||||
|
|
||||||
|
# Ý => Y
|
||||||
|
"\u00DD" => "Y"
|
||||||
|
|
||||||
|
# Ÿ => Y
|
||||||
|
"\u0178" => "Y"
|
||||||
|
|
||||||
|
# à => a
|
||||||
|
"\u00E0" => "a"
|
||||||
|
|
||||||
|
# á => a
|
||||||
|
"\u00E1" => "a"
|
||||||
|
|
||||||
|
# â => a
|
||||||
|
"\u00E2" => "a"
|
||||||
|
|
||||||
|
# ã => a
|
||||||
|
"\u00E3" => "a"
|
||||||
|
|
||||||
|
# ä => a
|
||||||
|
"\u00E4" => "a"
|
||||||
|
|
||||||
|
# å => a
|
||||||
|
"\u00E5" => "a"
|
||||||
|
|
||||||
|
# æ => ae
|
||||||
|
"\u00E6" => "ae"
|
||||||
|
|
||||||
|
# ç => c
|
||||||
|
"\u00E7" => "c"
|
||||||
|
|
||||||
|
# è => e
|
||||||
|
"\u00E8" => "e"
|
||||||
|
|
||||||
|
# é => e
|
||||||
|
"\u00E9" => "e"
|
||||||
|
|
||||||
|
# ê => e
|
||||||
|
"\u00EA" => "e"
|
||||||
|
|
||||||
|
# ë => e
|
||||||
|
"\u00EB" => "e"
|
||||||
|
|
||||||
|
# ì => i
|
||||||
|
"\u00EC" => "i"
|
||||||
|
|
||||||
|
# í => i
|
||||||
|
"\u00ED" => "i"
|
||||||
|
|
||||||
|
# î => i
|
||||||
|
"\u00EE" => "i"
|
||||||
|
|
||||||
|
# ï => i
|
||||||
|
"\u00EF" => "i"
|
||||||
|
|
||||||
|
# ij => ij
|
||||||
|
"\u0133" => "ij"
|
||||||
|
|
||||||
|
# ð => d
|
||||||
|
"\u00F0" => "d"
|
||||||
|
|
||||||
|
# ñ => n
|
||||||
|
"\u00F1" => "n"
|
||||||
|
|
||||||
|
# ò => o
|
||||||
|
"\u00F2" => "o"
|
||||||
|
|
||||||
|
# ó => o
|
||||||
|
"\u00F3" => "o"
|
||||||
|
|
||||||
|
# ô => o
|
||||||
|
"\u00F4" => "o"
|
||||||
|
|
||||||
|
# õ => o
|
||||||
|
"\u00F5" => "o"
|
||||||
|
|
||||||
|
# ö => o
|
||||||
|
"\u00F6" => "o"
|
||||||
|
|
||||||
|
# ø => o
|
||||||
|
"\u00F8" => "o"
|
||||||
|
|
||||||
|
# œ => oe
|
||||||
|
"\u0153" => "oe"
|
||||||
|
|
||||||
|
# ß => ss
|
||||||
|
"\u00DF" => "ss"
|
||||||
|
|
||||||
|
# þ => th
|
||||||
|
"\u00FE" => "th"
|
||||||
|
|
||||||
|
# ù => u
|
||||||
|
"\u00F9" => "u"
|
||||||
|
|
||||||
|
# ú => u
|
||||||
|
"\u00FA" => "u"
|
||||||
|
|
||||||
|
# û => u
|
||||||
|
"\u00FB" => "u"
|
||||||
|
|
||||||
|
# ü => u
|
||||||
|
"\u00FC" => "u"
|
||||||
|
|
||||||
|
# ý => y
|
||||||
|
"\u00FD" => "y"
|
||||||
|
|
||||||
|
# ÿ => y
|
||||||
|
"\u00FF" => "y"
|
||||||
|
|
||||||
|
# ff => ff
|
||||||
|
"\uFB00" => "ff"
|
||||||
|
|
||||||
|
# fi => fi
|
||||||
|
"\uFB01" => "fi"
|
||||||
|
|
||||||
|
# fl => fl
|
||||||
|
"\uFB02" => "fl"
|
||||||
|
|
||||||
|
# ffi => ffi
|
||||||
|
"\uFB03" => "ffi"
|
||||||
|
|
||||||
|
# ffl => ffl
|
||||||
|
"\uFB04" => "ffl"
|
||||||
|
|
||||||
|
# ſt => ft
|
||||||
|
"\uFB05" => "ft"
|
||||||
|
|
||||||
|
# st => st
|
||||||
|
"\uFB06" => "st"
|
21
solr/exampleSolr/conf/protwords.txt
Normal file
21
solr/exampleSolr/conf/protwords.txt
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
# 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.
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------
|
||||||
|
# Use a protected word file to protect against the stemmer reducing two
|
||||||
|
# unrelated words to the same base word.
|
||||||
|
|
||||||
|
# Some non-words that normally won't be encountered,
|
||||||
|
# just to test that they won't be stemmed.
|
||||||
|
dontstems
|
||||||
|
zwhacky
|
||||||
|
|
569
solr/exampleSolr/conf/schema.xml
Normal file
569
solr/exampleSolr/conf/schema.xml
Normal file
|
@ -0,0 +1,569 @@
|
||||||
|
<?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="example" 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"/>
|
||||||
|
|
||||||
|
<!-- 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>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- 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
|
||||||
|
identity -> 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.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<field name="id" type="string" indexed="true" stored="true" required="true" />
|
||||||
|
<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="OR"/>
|
||||||
|
|
||||||
|
<!-- 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="cat" dest="text"/>
|
||||||
|
<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>
|
24
solr/exampleSolr/conf/scripts.conf
Normal file
24
solr/exampleSolr/conf/scripts.conf
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
# 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.
|
||||||
|
|
||||||
|
user=
|
||||||
|
solr_hostname=localhost
|
||||||
|
solr_port=8983
|
||||||
|
rsyncd_port=18983
|
||||||
|
data_dir=
|
||||||
|
webapp_name=solr
|
||||||
|
master_host=
|
||||||
|
master_data_dir=
|
||||||
|
master_status_dir=
|
1033
solr/exampleSolr/conf/solrconfig.xml
Normal file
1033
solr/exampleSolr/conf/solrconfig.xml
Normal file
File diff suppressed because it is too large
Load diff
2
solr/exampleSolr/conf/spellings.txt
Normal file
2
solr/exampleSolr/conf/spellings.txt
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
pizza
|
||||||
|
history
|
58
solr/exampleSolr/conf/stopwords.txt
Normal file
58
solr/exampleSolr/conf/stopwords.txt
Normal file
|
@ -0,0 +1,58 @@
|
||||||
|
# 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.
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------
|
||||||
|
# a couple of test stopwords to test that the words are really being
|
||||||
|
# configured from this file:
|
||||||
|
stopworda
|
||||||
|
stopwordb
|
||||||
|
|
||||||
|
#Standard english stop words taken from Lucene's StopAnalyzer
|
||||||
|
a
|
||||||
|
an
|
||||||
|
and
|
||||||
|
are
|
||||||
|
as
|
||||||
|
at
|
||||||
|
be
|
||||||
|
but
|
||||||
|
by
|
||||||
|
for
|
||||||
|
if
|
||||||
|
in
|
||||||
|
into
|
||||||
|
is
|
||||||
|
it
|
||||||
|
no
|
||||||
|
not
|
||||||
|
of
|
||||||
|
on
|
||||||
|
or
|
||||||
|
s
|
||||||
|
such
|
||||||
|
t
|
||||||
|
that
|
||||||
|
the
|
||||||
|
their
|
||||||
|
then
|
||||||
|
there
|
||||||
|
these
|
||||||
|
they
|
||||||
|
this
|
||||||
|
to
|
||||||
|
was
|
||||||
|
will
|
||||||
|
with
|
||||||
|
|
31
solr/exampleSolr/conf/synonyms.txt
Normal file
31
solr/exampleSolr/conf/synonyms.txt
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
# 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.
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------
|
||||||
|
#some test synonym mappings unlikely to appear in real input text
|
||||||
|
aaa => aaaa
|
||||||
|
bbb => bbbb1 bbbb2
|
||||||
|
ccc => cccc1,cccc2
|
||||||
|
a\=>a => b\=>b
|
||||||
|
a\,a => b\,b
|
||||||
|
fooaaa,baraaa,bazaaa
|
||||||
|
|
||||||
|
# Some synonym groups specific to this example
|
||||||
|
GB,gib,gigabyte,gigabytes
|
||||||
|
MB,mib,megabyte,megabytes
|
||||||
|
Television, Televisions, TV, TVs
|
||||||
|
#notice we use "gib" instead of "GiB" so any WordDelimiterFilter coming
|
||||||
|
#after us won't split it into two words.
|
||||||
|
|
||||||
|
# Synonym mappings can be used for spelling correction too
|
||||||
|
pixima => pixma
|
||||||
|
|
132
solr/exampleSolr/conf/xslt/example.xsl
Normal file
132
solr/exampleSolr/conf/xslt/example.xsl
Normal file
|
@ -0,0 +1,132 @@
|
||||||
|
<?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.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!--
|
||||||
|
Simple transform of Solr query results to HTML
|
||||||
|
-->
|
||||||
|
<xsl:stylesheet version='1.0'
|
||||||
|
xmlns:xsl='http://www.w3.org/1999/XSL/Transform'
|
||||||
|
>
|
||||||
|
|
||||||
|
<xsl:output media-type="text/html; charset=UTF-8" encoding="UTF-8"/>
|
||||||
|
|
||||||
|
<xsl:variable name="title" select="concat('Solr search results (',response/result/@numFound,' documents)')"/>
|
||||||
|
|
||||||
|
<xsl:template match='/'>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title><xsl:value-of select="$title"/></title>
|
||||||
|
<xsl:call-template name="css"/>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1><xsl:value-of select="$title"/></h1>
|
||||||
|
<div class="note">
|
||||||
|
This has been formatted by the sample "example.xsl" transform -
|
||||||
|
use your own XSLT to get a nicer page
|
||||||
|
</div>
|
||||||
|
<xsl:apply-templates select="response/result/doc"/>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<xsl:template match="doc">
|
||||||
|
<xsl:variable name="pos" select="position()"/>
|
||||||
|
<div class="doc">
|
||||||
|
<table width="100%">
|
||||||
|
<xsl:apply-templates>
|
||||||
|
<xsl:with-param name="pos"><xsl:value-of select="$pos"/></xsl:with-param>
|
||||||
|
</xsl:apply-templates>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<xsl:template match="doc/*[@name='score']" priority="100">
|
||||||
|
<xsl:param name="pos"></xsl:param>
|
||||||
|
<tr>
|
||||||
|
<td class="name">
|
||||||
|
<xsl:value-of select="@name"/>
|
||||||
|
</td>
|
||||||
|
<td class="value">
|
||||||
|
<xsl:value-of select="."/>
|
||||||
|
|
||||||
|
<xsl:if test="boolean(//lst[@name='explain'])">
|
||||||
|
<xsl:element name="a">
|
||||||
|
<!-- can't allow whitespace here -->
|
||||||
|
<xsl:attribute name="href">javascript:toggle("<xsl:value-of select="concat('exp-',$pos)" />");</xsl:attribute>?</xsl:element>
|
||||||
|
<br/>
|
||||||
|
<xsl:element name="div">
|
||||||
|
<xsl:attribute name="class">exp</xsl:attribute>
|
||||||
|
<xsl:attribute name="id">
|
||||||
|
<xsl:value-of select="concat('exp-',$pos)" />
|
||||||
|
</xsl:attribute>
|
||||||
|
<xsl:value-of select="//lst[@name='explain']/str[position()=$pos]"/>
|
||||||
|
</xsl:element>
|
||||||
|
</xsl:if>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<xsl:template match="doc/arr" priority="100">
|
||||||
|
<tr>
|
||||||
|
<td class="name">
|
||||||
|
<xsl:value-of select="@name"/>
|
||||||
|
</td>
|
||||||
|
<td class="value">
|
||||||
|
<ul>
|
||||||
|
<xsl:for-each select="*">
|
||||||
|
<li><xsl:value-of select="."/></li>
|
||||||
|
</xsl:for-each>
|
||||||
|
</ul>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
|
||||||
|
<xsl:template match="doc/*">
|
||||||
|
<tr>
|
||||||
|
<td class="name">
|
||||||
|
<xsl:value-of select="@name"/>
|
||||||
|
</td>
|
||||||
|
<td class="value">
|
||||||
|
<xsl:value-of select="."/>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<xsl:template match="*"/>
|
||||||
|
|
||||||
|
<xsl:template name="css">
|
||||||
|
<script>
|
||||||
|
function toggle(id) {
|
||||||
|
var obj = document.getElementById(id);
|
||||||
|
obj.style.display = (obj.style.display != 'block') ? 'block' : 'none';
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
<style type="text/css">
|
||||||
|
body { font-family: "Lucida Grande", sans-serif }
|
||||||
|
td.name { font-style: italic; font-size:80%; }
|
||||||
|
td { vertical-align: top; }
|
||||||
|
ul { margin: 0px; margin-left: 1em; padding: 0px; }
|
||||||
|
.note { font-size:80%; }
|
||||||
|
.doc { margin-top: 1em; border-top: solid grey 1px; }
|
||||||
|
.exp { display: none; font-family: monospace; white-space: pre; }
|
||||||
|
</style>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
</xsl:stylesheet>
|
67
solr/exampleSolr/conf/xslt/example_atom.xsl
Normal file
67
solr/exampleSolr/conf/xslt/example_atom.xsl
Normal file
|
@ -0,0 +1,67 @@
|
||||||
|
<?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.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!--
|
||||||
|
Simple transform of Solr query results to Atom
|
||||||
|
-->
|
||||||
|
|
||||||
|
<xsl:stylesheet version='1.0'
|
||||||
|
xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
|
||||||
|
|
||||||
|
<xsl:output
|
||||||
|
method="xml"
|
||||||
|
encoding="utf-8"
|
||||||
|
media-type="text/xml; charset=UTF-8"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<xsl:template match='/'>
|
||||||
|
<xsl:variable name="query" select="response/lst[@name='responseHeader']/lst[@name='params']/str[@name='q']"/>
|
||||||
|
<feed xmlns="http://www.w3.org/2005/Atom">
|
||||||
|
<title>Example Solr Atom 1.0 Feed</title>
|
||||||
|
<subtitle>
|
||||||
|
This has been formatted by the sample "example_atom.xsl" transform -
|
||||||
|
use your own XSLT to get a nicer Atom feed.
|
||||||
|
</subtitle>
|
||||||
|
<author>
|
||||||
|
<name>Apache Solr</name>
|
||||||
|
<email>solr-user@lucene.apache.org</email>
|
||||||
|
</author>
|
||||||
|
<link rel="self" type="application/atom+xml"
|
||||||
|
href="http://localhost:8983/solr/q={$query}&wt=xslt&tr=atom.xsl"/>
|
||||||
|
<updated>
|
||||||
|
<xsl:value-of select="response/result/doc[position()=1]/date[@name='timestamp']"/>
|
||||||
|
</updated>
|
||||||
|
<id>tag:localhost,2007:example</id>
|
||||||
|
<xsl:apply-templates select="response/result/doc"/>
|
||||||
|
</feed>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<!-- search results xslt -->
|
||||||
|
<xsl:template match="doc">
|
||||||
|
<xsl:variable name="id" select="str[@name='id']"/>
|
||||||
|
<entry>
|
||||||
|
<title><xsl:value-of select="str[@name='name']"/></title>
|
||||||
|
<link href="http://localhost:8983/solr/select?q={$id}"/>
|
||||||
|
<id>tag:localhost,2007:<xsl:value-of select="$id"/></id>
|
||||||
|
<summary><xsl:value-of select="arr[@name='features']"/></summary>
|
||||||
|
<updated><xsl:value-of select="date[@name='timestamp']"/></updated>
|
||||||
|
</entry>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
</xsl:stylesheet>
|
66
solr/exampleSolr/conf/xslt/example_rss.xsl
Normal file
66
solr/exampleSolr/conf/xslt/example_rss.xsl
Normal file
|
@ -0,0 +1,66 @@
|
||||||
|
<?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.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!--
|
||||||
|
Simple transform of Solr query results to RSS
|
||||||
|
-->
|
||||||
|
|
||||||
|
<xsl:stylesheet version='1.0'
|
||||||
|
xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
|
||||||
|
|
||||||
|
<xsl:output
|
||||||
|
method="xml"
|
||||||
|
encoding="utf-8"
|
||||||
|
media-type="text/xml; charset=UTF-8"
|
||||||
|
/>
|
||||||
|
<xsl:template match='/'>
|
||||||
|
<rss version="2.0">
|
||||||
|
<channel>
|
||||||
|
<title>Example Solr RSS 2.0 Feed</title>
|
||||||
|
<link>http://localhost:8983/solr</link>
|
||||||
|
<description>
|
||||||
|
This has been formatted by the sample "example_rss.xsl" transform -
|
||||||
|
use your own XSLT to get a nicer RSS feed.
|
||||||
|
</description>
|
||||||
|
<language>en-us</language>
|
||||||
|
<docs>http://localhost:8983/solr</docs>
|
||||||
|
<xsl:apply-templates select="response/result/doc"/>
|
||||||
|
</channel>
|
||||||
|
</rss>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<!-- search results xslt -->
|
||||||
|
<xsl:template match="doc">
|
||||||
|
<xsl:variable name="id" select="str[@name='id']"/>
|
||||||
|
<xsl:variable name="timestamp" select="date[@name='timestamp']"/>
|
||||||
|
<item>
|
||||||
|
<title><xsl:value-of select="str[@name='name']"/></title>
|
||||||
|
<link>
|
||||||
|
http://localhost:8983/solr/select?q=id:<xsl:value-of select="$id"/>
|
||||||
|
</link>
|
||||||
|
<description>
|
||||||
|
<xsl:value-of select="arr[@name='features']"/>
|
||||||
|
</description>
|
||||||
|
<pubDate><xsl:value-of select="$timestamp"/></pubDate>
|
||||||
|
<guid>
|
||||||
|
http://localhost:8983/solr/select?q=id:<xsl:value-of select="$id"/>
|
||||||
|
</guid>
|
||||||
|
</item>
|
||||||
|
</xsl:template>
|
||||||
|
</xsl:stylesheet>
|
337
solr/exampleSolr/conf/xslt/luke.xsl
Normal file
337
solr/exampleSolr/conf/xslt/luke.xsl
Normal file
|
@ -0,0 +1,337 @@
|
||||||
|
<?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.
|
||||||
|
-->
|
||||||
|
|
||||||
|
|
||||||
|
<!--
|
||||||
|
Display the luke request handler with graphs
|
||||||
|
-->
|
||||||
|
<xsl:stylesheet
|
||||||
|
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
|
||||||
|
xmlns="http://www.w3.org/1999/xhtml"
|
||||||
|
version="1.0"
|
||||||
|
>
|
||||||
|
<xsl:output
|
||||||
|
method="html"
|
||||||
|
encoding="UTF-8"
|
||||||
|
media-type="text/html; charset=UTF-8"
|
||||||
|
doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"
|
||||||
|
doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<xsl:variable name="title">Solr Luke Request Handler Response</xsl:variable>
|
||||||
|
|
||||||
|
<xsl:template match="/">
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||||
|
<head>
|
||||||
|
<link rel="stylesheet" type="text/css" href="solr-admin.css"/>
|
||||||
|
<link rel="icon" href="favicon.ico" type="image/ico"/>
|
||||||
|
<link rel="shortcut icon" href="favicon.ico" type="image/ico"/>
|
||||||
|
<title>
|
||||||
|
<xsl:value-of select="$title"/>
|
||||||
|
</title>
|
||||||
|
<xsl:call-template name="css"/>
|
||||||
|
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>
|
||||||
|
<xsl:value-of select="$title"/>
|
||||||
|
</h1>
|
||||||
|
<div class="doc">
|
||||||
|
<ul>
|
||||||
|
<xsl:if test="response/lst[@name='index']">
|
||||||
|
<li>
|
||||||
|
<a href="#index">Index Statistics</a>
|
||||||
|
</li>
|
||||||
|
</xsl:if>
|
||||||
|
<xsl:if test="response/lst[@name='fields']">
|
||||||
|
<li>
|
||||||
|
<a href="#fields">Field Statistics</a>
|
||||||
|
<ul>
|
||||||
|
<xsl:for-each select="response/lst[@name='fields']/lst">
|
||||||
|
<li>
|
||||||
|
<a href="#{@name}">
|
||||||
|
<xsl:value-of select="@name"/>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
</xsl:for-each>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</xsl:if>
|
||||||
|
<xsl:if test="response/lst[@name='doc']">
|
||||||
|
<li>
|
||||||
|
<a href="#doc">Document statistics</a>
|
||||||
|
</li>
|
||||||
|
</xsl:if>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<xsl:if test="response/lst[@name='index']">
|
||||||
|
<h2><a name="index"/>Index Statistics</h2>
|
||||||
|
<xsl:apply-templates select="response/lst[@name='index']"/>
|
||||||
|
</xsl:if>
|
||||||
|
<xsl:if test="response/lst[@name='fields']">
|
||||||
|
<h2><a name="fields"/>Field Statistics</h2>
|
||||||
|
<xsl:apply-templates select="response/lst[@name='fields']"/>
|
||||||
|
</xsl:if>
|
||||||
|
<xsl:if test="response/lst[@name='doc']">
|
||||||
|
<h2><a name="doc"/>Document statistics</h2>
|
||||||
|
<xsl:apply-templates select="response/lst[@name='doc']"/>
|
||||||
|
</xsl:if>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<xsl:template match="lst">
|
||||||
|
<xsl:if test="parent::lst">
|
||||||
|
<tr>
|
||||||
|
<td colspan="2">
|
||||||
|
<div class="doc">
|
||||||
|
<xsl:call-template name="list"/>
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</xsl:if>
|
||||||
|
<xsl:if test="not(parent::lst)">
|
||||||
|
<div class="doc">
|
||||||
|
<xsl:call-template name="list"/>
|
||||||
|
</div>
|
||||||
|
</xsl:if>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<xsl:template name="list">
|
||||||
|
<xsl:if test="count(child::*)>0">
|
||||||
|
<table>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th colspan="2">
|
||||||
|
<p>
|
||||||
|
<a name="{@name}"/>
|
||||||
|
</p>
|
||||||
|
<xsl:value-of select="@name"/>
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<xsl:choose>
|
||||||
|
<xsl:when
|
||||||
|
test="@name='histogram'">
|
||||||
|
<tr>
|
||||||
|
<td colspan="2">
|
||||||
|
<xsl:call-template name="histogram"/>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</xsl:when>
|
||||||
|
<xsl:otherwise>
|
||||||
|
<xsl:apply-templates/>
|
||||||
|
</xsl:otherwise>
|
||||||
|
</xsl:choose>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</xsl:if>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<xsl:template name="histogram">
|
||||||
|
<div class="doc">
|
||||||
|
<xsl:call-template name="barchart">
|
||||||
|
<xsl:with-param name="max_bar_width">50</xsl:with-param>
|
||||||
|
<xsl:with-param name="iwidth">800</xsl:with-param>
|
||||||
|
<xsl:with-param name="iheight">160</xsl:with-param>
|
||||||
|
<xsl:with-param name="fill">blue</xsl:with-param>
|
||||||
|
</xsl:call-template>
|
||||||
|
</div>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<xsl:template name="barchart">
|
||||||
|
<xsl:param name="max_bar_width"/>
|
||||||
|
<xsl:param name="iwidth"/>
|
||||||
|
<xsl:param name="iheight"/>
|
||||||
|
<xsl:param name="fill"/>
|
||||||
|
<xsl:variable name="max">
|
||||||
|
<xsl:for-each select="int">
|
||||||
|
<xsl:sort data-type="number" order="descending"/>
|
||||||
|
<xsl:if test="position()=1">
|
||||||
|
<xsl:value-of select="."/>
|
||||||
|
</xsl:if>
|
||||||
|
</xsl:for-each>
|
||||||
|
</xsl:variable>
|
||||||
|
<xsl:variable name="bars">
|
||||||
|
<xsl:value-of select="count(int)"/>
|
||||||
|
</xsl:variable>
|
||||||
|
<xsl:variable name="bar_width">
|
||||||
|
<xsl:choose>
|
||||||
|
<xsl:when test="$max_bar_width < ($iwidth div $bars)">
|
||||||
|
<xsl:value-of select="$max_bar_width"/>
|
||||||
|
</xsl:when>
|
||||||
|
<xsl:otherwise>
|
||||||
|
<xsl:value-of select="$iwidth div $bars"/>
|
||||||
|
</xsl:otherwise>
|
||||||
|
</xsl:choose>
|
||||||
|
</xsl:variable>
|
||||||
|
<table class="histogram">
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<xsl:for-each select="int">
|
||||||
|
<td>
|
||||||
|
<xsl:value-of select="."/>
|
||||||
|
<div class="histogram">
|
||||||
|
<xsl:attribute name="style">background-color: <xsl:value-of select="$fill"/>; width: <xsl:value-of select="$bar_width"/>px; height: <xsl:value-of select="($iheight*number(.)) div $max"/>px;</xsl:attribute>
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
</xsl:for-each>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<xsl:for-each select="int">
|
||||||
|
<td>
|
||||||
|
<xsl:value-of select="@name"/>
|
||||||
|
</td>
|
||||||
|
</xsl:for-each>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<xsl:template name="keyvalue">
|
||||||
|
<xsl:choose>
|
||||||
|
<xsl:when test="@name">
|
||||||
|
<tr>
|
||||||
|
<td class="name">
|
||||||
|
<xsl:value-of select="@name"/>
|
||||||
|
</td>
|
||||||
|
<td class="value">
|
||||||
|
<xsl:value-of select="."/>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</xsl:when>
|
||||||
|
<xsl:otherwise>
|
||||||
|
<xsl:value-of select="."/>
|
||||||
|
</xsl:otherwise>
|
||||||
|
</xsl:choose>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<xsl:template match="int|bool|long|float|double|uuid|date">
|
||||||
|
<xsl:call-template name="keyvalue"/>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<xsl:template match="arr">
|
||||||
|
<tr>
|
||||||
|
<td class="name">
|
||||||
|
<xsl:value-of select="@name"/>
|
||||||
|
</td>
|
||||||
|
<td class="value">
|
||||||
|
<ul>
|
||||||
|
<xsl:for-each select="child::*">
|
||||||
|
<li>
|
||||||
|
<xsl:apply-templates/>
|
||||||
|
</li>
|
||||||
|
</xsl:for-each>
|
||||||
|
</ul>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<xsl:template match="str">
|
||||||
|
<xsl:choose>
|
||||||
|
<xsl:when test="@name='schema' or @name='index' or @name='flags'">
|
||||||
|
<xsl:call-template name="schema"/>
|
||||||
|
</xsl:when>
|
||||||
|
<xsl:otherwise>
|
||||||
|
<xsl:call-template name="keyvalue"/>
|
||||||
|
</xsl:otherwise>
|
||||||
|
</xsl:choose>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<xsl:template name="schema">
|
||||||
|
<tr>
|
||||||
|
<td class="name">
|
||||||
|
<xsl:value-of select="@name"/>
|
||||||
|
</td>
|
||||||
|
<td class="value">
|
||||||
|
<xsl:if test="contains(.,'unstored')">
|
||||||
|
<xsl:value-of select="."/>
|
||||||
|
</xsl:if>
|
||||||
|
<xsl:if test="not(contains(.,'unstored'))">
|
||||||
|
<xsl:call-template name="infochar2string">
|
||||||
|
<xsl:with-param name="charList">
|
||||||
|
<xsl:value-of select="."/>
|
||||||
|
</xsl:with-param>
|
||||||
|
</xsl:call-template>
|
||||||
|
</xsl:if>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<xsl:template name="infochar2string">
|
||||||
|
<xsl:param name="i">1</xsl:param>
|
||||||
|
<xsl:param name="charList"/>
|
||||||
|
|
||||||
|
<xsl:variable name="char">
|
||||||
|
<xsl:value-of select="substring($charList,$i,1)"/>
|
||||||
|
</xsl:variable>
|
||||||
|
<xsl:choose>
|
||||||
|
<xsl:when test="$char='I'">
|
||||||
|
<xsl:value-of select="/response/lst[@name='info']/lst/str[@name='I']"/> - </xsl:when>
|
||||||
|
<xsl:when test="$char='T'">
|
||||||
|
<xsl:value-of select="/response/lst[@name='info']/lst/str[@name='T']"/> - </xsl:when>
|
||||||
|
<xsl:when test="$char='S'">
|
||||||
|
<xsl:value-of select="/response/lst[@name='info']/lst/str[@name='S']"/> - </xsl:when>
|
||||||
|
<xsl:when test="$char='M'">
|
||||||
|
<xsl:value-of select="/response/lst[@name='info']/lst/str[@name='M']"/> - </xsl:when>
|
||||||
|
<xsl:when test="$char='V'">
|
||||||
|
<xsl:value-of select="/response/lst[@name='info']/lst/str[@name='V']"/> - </xsl:when>
|
||||||
|
<xsl:when test="$char='o'">
|
||||||
|
<xsl:value-of select="/response/lst[@name='info']/lst/str[@name='o']"/> - </xsl:when>
|
||||||
|
<xsl:when test="$char='p'">
|
||||||
|
<xsl:value-of select="/response/lst[@name='info']/lst/str[@name='p']"/> - </xsl:when>
|
||||||
|
<xsl:when test="$char='O'">
|
||||||
|
<xsl:value-of select="/response/lst[@name='info']/lst/str[@name='O']"/> - </xsl:when>
|
||||||
|
<xsl:when test="$char='L'">
|
||||||
|
<xsl:value-of select="/response/lst[@name='info']/lst/str[@name='L']"/> - </xsl:when>
|
||||||
|
<xsl:when test="$char='B'">
|
||||||
|
<xsl:value-of select="/response/lst[@name='info']/lst/str[@name='B']"/> - </xsl:when>
|
||||||
|
<xsl:when test="$char='C'">
|
||||||
|
<xsl:value-of select="/response/lst[@name='info']/lst/str[@name='C']"/> - </xsl:when>
|
||||||
|
<xsl:when test="$char='f'">
|
||||||
|
<xsl:value-of select="/response/lst[@name='info']/lst/str[@name='f']"/> - </xsl:when>
|
||||||
|
<xsl:when test="$char='l'">
|
||||||
|
<xsl:value-of select="/response/lst[@name='info']/lst/str[@name='l']"/> -
|
||||||
|
</xsl:when>
|
||||||
|
</xsl:choose>
|
||||||
|
|
||||||
|
<xsl:if test="not($i>=string-length($charList))">
|
||||||
|
<xsl:call-template name="infochar2string">
|
||||||
|
<xsl:with-param name="i">
|
||||||
|
<xsl:value-of select="$i+1"/>
|
||||||
|
</xsl:with-param>
|
||||||
|
<xsl:with-param name="charList">
|
||||||
|
<xsl:value-of select="$charList"/>
|
||||||
|
</xsl:with-param>
|
||||||
|
</xsl:call-template>
|
||||||
|
</xsl:if>
|
||||||
|
</xsl:template>
|
||||||
|
<xsl:template name="css">
|
||||||
|
<style type="text/css">
|
||||||
|
<![CDATA[
|
||||||
|
td.name {font-style: italic; font-size:80%; }
|
||||||
|
.doc { margin: 0.5em; border: solid grey 1px; }
|
||||||
|
.exp { display: none; font-family: monospace; white-space: pre; }
|
||||||
|
div.histogram { background: none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;}
|
||||||
|
table.histogram { width: auto; vertical-align: bottom; }
|
||||||
|
table.histogram td, table.histogram th { text-align: center; vertical-align: bottom; border-bottom: 1px solid #ff9933; width: auto; }
|
||||||
|
]]>
|
||||||
|
</style>
|
||||||
|
</xsl:template>
|
||||||
|
</xsl:stylesheet>
|
11
solr/exampleSolrContext.xml
Normal file
11
solr/exampleSolrContext.xml
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
|
||||||
|
<Context docBase="${solr.docbase}"
|
||||||
|
debug="0" crossContext="true">
|
||||||
|
|
||||||
|
<Environment
|
||||||
|
name="solr/home"
|
||||||
|
type="java.lang.String"
|
||||||
|
value="${solr.home}" override="true"/>
|
||||||
|
|
||||||
|
</Context>
|
Loading…
Add table
Add a link
Reference in a new issue