• R/O
  • SSH
  • HTTPS

fess: コミット


コミットメタ情報

リビジョン1802 (tree)
日時2013-10-25 18:10:16
作者shinsuke

ログメッセージ

version 8.2.0

変更サマリ

差分

--- fess-server/tags/fess-server-8.2.0/src/rpm/fess.spec (revision 0)
+++ fess-server/tags/fess-server-8.2.0/src/rpm/fess.spec (revision 1802)
@@ -0,0 +1,145 @@
1+%define __jar_repack 0
2+
3+%global dbtype __DBTYPE__
4+%global fess_version __FESS_VERSION__
5+%global fess_pkg_version __FESS_PKG_VERSION__
6+%global fess_release __FESS_REVISION__
7+%global product_root __PRODUCT_ROOT__
8+%global product_name __PRODUCT_NAME__
9+%global user_name __USER_NAME__
10+
11+%if %{dbtype}
12+Name: %{product_name}-server-%{dbtype}
13+%else
14+Name: %{product_name}-server-h2
15+%endif
16+Version: %{fess_version}
17+Release: %{fess_release}
18+Epoch: 1
19+Summary: Fess Server
20+Group: Applications/Multimedia
21+BuildArch: noarch
22+License: Apache License, Version 2.0
23+URL: http://fess.sourceforge.jp/
24+BuildRoot: %{_tmpdir}/%{name}-%{version}-%{release}
25+
26+%if %{dbtype}
27+Source0: fess-server-%{dbtype}-%{fess_pkg_version}.zip
28+%else
29+Source0: fess-server-%{fess_pkg_version}.zip
30+%endif
31+
32+BuildRequires: unzip
33+
34+Requires: jdk >= 1.6.0
35+Requires(pre): user(%{user_name})
36+Requires(pre): group(%{user_name})
37+Requires(pre): shadow-utils
38+Provides: user(%{user_name})
39+Provides: group(%{user_name})
40+
41+Requires(post): chkconfig
42+Requires(preun): chkconfig
43+Requires(preun): initscripts
44+Requires(postun): initscripts
45+
46+%if "%{dbtype}" == "mysql"
47+Requires: mysql-server
48+%endif
49+
50+%description
51+Fess is Java based full text search server provided as OSS product.
52+
53+%prep
54+rm -rf "${RPM_BUILD_ROOT}"
55+%setup -q -n fess-server-%{fess_pkg_version}
56+
57+%build
58+
59+%install
60+mkdir -p $RPM_BUILD_ROOT%{product_root}
61+cp -r $RPM_BUILD_DIR/fess-server-%{fess_pkg_version} $RPM_BUILD_ROOT%{product_root}/%{product_name}
62+%if "%{product_name}" != "fess"
63+ mv $RPM_BUILD_ROOT%{product_root}/%{product_name}/webapps/fess $RPM_BUILD_ROOT%{product_root}/%{product_name}/webapps/%{product_name}
64+%endif
65+rm -f $RPM_BUILD_ROOT%{product_root}/%{product_name}/webapps/*.war
66+
67+TMP_FILE=/tmp/build.$$
68+
69+sed -e "s/\(echo \"Using.*\)/\1 > \/dev\/null/" \
70+ $RPM_BUILD_ROOT%{product_root}/%{product_name}/bin/catalina.sh > $TMP_FILE
71+cp $TMP_FILE $RPM_BUILD_ROOT%{product_root}/%{product_name}/bin/catalina.sh
72+
73+sed -e "s/\/fess\//\/%{product_name}\//g" \
74+ $RPM_BUILD_ROOT%{product_root}/%{product_name}/webapps/%{product_name}/WEB-INF/web.xml > $TMP_FILE
75+cp $TMP_FILE $RPM_BUILD_ROOT%{product_root}/%{product_name}/webapps/%{product_name}/WEB-INF/web.xml
76+
77+sed -e "s/\/fess\//\/%{product_name}\//g" \
78+ $RPM_BUILD_ROOT%{product_root}/%{product_name}/bin/setenv.sh > $TMP_FILE
79+cp $TMP_FILE $RPM_BUILD_ROOT%{product_root}/%{product_name}/bin/setenv.sh
80+
81+sed -e "s/PRODUCT_NAME=.*/PRODUCT_NAME=%{product_name}/g" \
82+ $RPM_BUILD_ROOT%{product_root}/%{product_name}/extension/mysql/install.sh > $TMP_FILE
83+cp $TMP_FILE $RPM_BUILD_ROOT%{product_root}/%{product_name}/extension/mysql/install.sh
84+
85+rm $TMP_FILE
86+
87+mkdir -p $RPM_BUILD_ROOT%{product_root}/%{product_name}/webapps/%{product_name}/WEB-INF/conf
88+touch $RPM_BUILD_ROOT%{product_root}/%{product_name}/webapps/%{product_name}/WEB-INF/conf/solrserver.properties
89+touch $RPM_BUILD_ROOT%{product_root}/%{product_name}/webapps/%{product_name}/WEB-INF/conf/crawler.properties
90+
91+chmod +x $RPM_BUILD_ROOT%{product_root}/%{product_name}/bin/*.sh
92+chmod +x $RPM_BUILD_ROOT%{product_root}/%{product_name}/extension/mysql/*.sh
93+
94+mkdir -p $RPM_BUILD_ROOT/etc/init.d
95+sed -e "s/FESS_PROG=fess/FESS_PROG=%{product_name}/" \
96+ -e "s/FESS_USER=\"fess\"/FESS_USER=\"%{user_name}\"/" \
97+ $RPM_BUILD_DIR/fess-server-%{fess_pkg_version}/extension/scripts/fess > $RPM_BUILD_ROOT/etc/init.d/%{product_name}
98+
99+%clean
100+rm -rf "${RPM_BUILD_ROOT}"
101+
102+%pre
103+getent group %{user_name} >/dev/null || groupadd -r %{user_name}
104+getent passwd %{user_name} >/dev/null || \
105+useradd -d %{product_root}/%{product_name} -g %{user_name} -M -r %{user_name}
106+exit 0
107+
108+%post
109+/sbin/chkconfig --add %{product_name}
110+
111+%if "%{dbtype}" == "mysql"
112+ echo "Please run the following script to configure database."
113+ echo " %{product_root}/%{product_name}/extension/mysql/install.sh"
114+%endif
115+
116+%preun
117+# only delete user on removal, not upgrade
118+if [ $1 = 0 ]; then
119+ /sbin/service %{product_name} stop > /dev/null 2>&1
120+ /sbin/chkconfig --del %{product_name}
121+ pkill -U %{user_name}
122+ userdel %{user_name}
123+ rm -rf %{product_root}/%{product_name}/logs/*
124+ rm -rf %{product_root}/%{product_name}/conf/Catalina
125+ rm -rf %{product_root}/%{product_name}/webapps/%{product_name}/WEB-INF/logs/*
126+else
127+ /sbin/service %{product_name} stop > /dev/null 2>&1
128+fi
129+rm -rf %{product_root}/%{product_name}/webapps/%{product_name}/jar
130+rm -rf %{product_root}/%{product_name}/work/*
131+
132+%postun
133+if [ $1 -ge 1 ]; then
134+ /sbin/service %{product_name} start > /dev/null 2>&1
135+fi
136+
137+%files
138+%defattr(-,%{user_name},%{user_name},0755)
139+%{product_root}/%{product_name}
140+
141+%attr(755,root,root) /etc/init.d/%{product_name}
142+
143+%changelog
144+
145+
--- fess-server/tags/fess-server-8.2.0/src/tomcat/extension/mysql/install.sh (revision 0)
+++ fess-server/tags/fess-server-8.2.0/src/tomcat/extension/mysql/install.sh (revision 1802)
@@ -0,0 +1,58 @@
1+#!/bin/bash
2+
3+CONFIG_FILE=$1
4+cd `dirname $0`
5+BASE_DIR=`pwd`
6+
7+PRODUCT_NAME=fess
8+
9+if [ x$CONFIG_FILE != "x" -a -f "$CONFIG_FILE" ] ; then
10+ . $CONFIG_FILE
11+else
12+ echo -n "Please enter a new DB password(search server)> "
13+ read -s FESS_PASSWORD
14+ echo
15+
16+ echo -n "Please enter a new DB password(crawler)> "
17+ read -s ROBOT_PASSWORD
18+ echo
19+
20+ echo -n "MySQL(root) Password: "
21+ read -s MYSQL_PASSWORD
22+ echo
23+fi
24+
25+CREATE_SQL_FILE=/tmp/fess_db.sql.$$
26+echo "create database fess_db;" >> $CREATE_SQL_FILE
27+echo "GRANT ALL PRIVILEGES ON fess_db.* TO fess_user@localhost IDENTIFIED BY '$FESS_PASSWORD';" >> $CREATE_SQL_FILE
28+echo "create database fess_robot;" >> $CREATE_SQL_FILE
29+echo "GRANT ALL PRIVILEGES ON fess_robot.* TO s2robot@localhost IDENTIFIED BY '$ROBOT_PASSWORD';" >> $CREATE_SQL_FILE
30+echo "FLUSH PRIVILEGES;" >> $CREATE_SQL_FILE
31+echo -n "Creating DB on MySQL..."
32+mysql -u root --password=$MYSQL_PASSWORD < $CREATE_SQL_FILE
33+ret=`echo $?`
34+if [ $ret == 0 ] ; then
35+ echo "Created."
36+fi
37+rm $CREATE_SQL_FILE
38+
39+echo -n "Creating tables..."
40+mysql -u fess_user --password=$FESS_PASSWORD fess_db < $BASE_DIR/fess.ddl
41+ret1=`echo $?`
42+mysql -u s2robot --password=$ROBOT_PASSWORD fess_robot < $BASE_DIR/robot.ddl
43+ret2=`echo $?`
44+if [ $ret1 == 0 -a $ret2 == 0 ] ; then
45+ echo " Created."
46+fi
47+
48+cd ../..
49+
50+TMP_FILE=/tmp/fess_dicon.$$
51+sed -e "s/password\">[^<]*</password\">\"$FESS_PASSWORD\"</" \
52+ ./webapps/$PRODUCT_NAME/WEB-INF/classes/jdbc.dicon > $TMP_FILE
53+cp $TMP_FILE ./webapps/$PRODUCT_NAME/WEB-INF/classes/jdbc.dicon
54+sed -e "s/password\">[^<]*</password\">\"$ROBOT_PASSWORD\"</" \
55+ ./webapps/$PRODUCT_NAME/WEB-INF/classes/s2robot_jdbc.dicon > $TMP_FILE
56+cp $TMP_FILE ./webapps/$PRODUCT_NAME/WEB-INF/classes/s2robot_jdbc.dicon
57+rm $TMP_FILE
58+
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
--- fess-server/tags/fess-server-8.2.0/src/tomcat/extension/mysql/uninstall.sh (revision 0)
+++ fess-server/tags/fess-server-8.2.0/src/tomcat/extension/mysql/uninstall.sh (revision 1802)
@@ -0,0 +1,26 @@
1+#!/bin/bash
2+
3+CONFIG_FILE=$1
4+cd `dirname $0`
5+BASE_DIR=`pwd`
6+
7+if [ x$CONFIG_FILE != "x" -a -f "$CONFIG_FILE" ] ; then
8+ . $CONFIG_FILE
9+else
10+ echo -n "MySQL(root) Password: "
11+ read -s MYSQL_PASSWORD
12+ echo
13+fi
14+
15+DROP_SQL_FILE=/tmp/fess_db.sql.$$
16+echo "drop database fess_db;" >> $DROP_SQL_FILE
17+echo "drop database fess_robot;" >> $DROP_SQL_FILE
18+echo "FLUSH PRIVILEGES;" >> $DROP_SQL_FILE
19+echo -n "Dropping DB on MySQL..."
20+mysql -u root --password=$MYSQL_PASSWORD < $DROP_SQL_FILE
21+ret=`echo $?`
22+if [ $ret == 0 ] ; then
23+ echo "Dropped."
24+fi
25+rm $DROP_SQL_FILE
26+
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
--- fess-server/tags/fess-server-8.2.0/src/tomcat/solr/core1/conf/schema.xml (revision 0)
+++ fess-server/tags/fess-server-8.2.0/src/tomcat/solr/core1/conf/schema.xml (revision 1802)
@@ -0,0 +1,1394 @@
1+<?xml version="1.0" encoding="UTF-8" ?>
2+<!--
3+ Licensed to the Apache Software Foundation (ASF) under one or more
4+ contributor license agreements. See the NOTICE file distributed with
5+ this work for additional information regarding copyright ownership.
6+ The ASF licenses this file to You under the Apache License, Version 2.0
7+ (the "License"); you may not use this file except in compliance with
8+ the License. You may obtain a copy of the License at
9+
10+ http://www.apache.org/licenses/LICENSE-2.0
11+
12+ Unless required by applicable law or agreed to in writing, software
13+ distributed under the License is distributed on an "AS IS" BASIS,
14+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15+ See the License for the specific language governing permissions and
16+ limitations under the License.
17+-->
18+
19+<!--
20+ This is the Solr schema file. This file should be named "schema.xml" and
21+ should be in the conf directory under the solr home
22+ (i.e. ./solr/conf/schema.xml by default)
23+ or located where the classloader for the Solr webapp can find it.
24+
25+ This example schema is the recommended starting point for users.
26+ It should be kept correct and concise, usable out-of-the-box.
27+
28+ For more information, on how to customize this file, please see
29+ http://wiki.apache.org/solr/SchemaXml
30+
31+ PERFORMANCE NOTE: this schema includes many optional features and should not
32+ be used for benchmarking. To improve performance one could
33+ - set stored="false" for all fields possible (esp large fields) when you
34+ only need to search on the field but don't need to return the original
35+ value.
36+ - set indexed="false" if you don't need to search on the field, but only
37+ return the field as a result of searching on other indexed fields.
38+ - remove all unneeded copyField statements
39+ - for best index size and searching performance, set "index" to false
40+ for all general text fields, use copyField to copy them to the
41+ catchall "text" field, and use that for searching.
42+ - For maximum indexing performance, use the StreamingUpdateSolrServer
43+ java client.
44+ - Remember to run the JVM in server mode, and use a higher logging level
45+ that avoids logging every request
46+-->
47+
48+<schema name="fess" version="1.5">
49+ <!-- attribute "name" is the name of this schema and is only used for display purposes.
50+ version="x.y" is Solr's version number for the schema syntax and
51+ semantics. It should not normally be changed by applications.
52+
53+ 1.0: multiValued attribute did not exist, all fields are multiValued
54+ by nature
55+ 1.1: multiValued attribute introduced, false by default
56+ 1.2: omitTermFreqAndPositions attribute introduced, true by default
57+ except for text fields.
58+ 1.3: removed optional field compress feature
59+ 1.4: autoGeneratePhraseQueries attribute introduced to drive QueryParser
60+ behavior when a single string produces multiple tokens. Defaults
61+ to off for version >= 1.4
62+ 1.5: omitNorms defaults to true for primitive field types
63+ (int, float, boolean, string...)
64+ -->
65+
66+ <fields>
67+ <!-- Valid attributes for fields:
68+ name: mandatory - the name for the field
69+ type: mandatory - the name of a field type from the
70+ <types> fieldType section
71+ indexed: true if this field should be indexed (searchable or sortable)
72+ stored: true if this field should be retrievable
73+ docValues: true if this field should have doc values. Doc values are
74+ useful for faceting, grouping, sorting and function queries. Although not
75+ required, doc values will make the index faster to load, more
76+ NRT-friendly and more memory-efficient. They however come with some
77+ limitations: they are currently only supported by StrField, UUIDField
78+ and all Trie*Fields, and depending on the field type, they might
79+ require the field to be single-valued, be required or have a default
80+ value (check the documentation of the field type you're interested in
81+ for more information)
82+ multiValued: true if this field may contain multiple values per document
83+ omitNorms: (expert) set to true to omit the norms associated with
84+ this field (this disables length normalization and index-time
85+ boosting for the field, and saves some memory). Only full-text
86+ fields or fields that need an index-time boost need norms.
87+ Norms are omitted for primitive (non-analyzed) types by default.
88+ termVectors: [false] set to true to store the term vector for a
89+ given field.
90+ When using MoreLikeThis, fields used for similarity should be
91+ stored for best performance.
92+ termPositions: Store position information with the term vector.
93+ This will increase storage costs.
94+ termOffsets: Store offset information with the term vector. This
95+ will increase storage costs.
96+ required: The field is required. It will throw an error if the
97+ value does not exist
98+ default: a value that should be used if no value is specified
99+ when adding a document.
100+ -->
101+
102+ <field name="id" type="string" stored="true" indexed="true" required="true" multiValued="false" docValues="true" />
103+ <!-- core fields -->
104+ <field name="parentId" type="string" stored="true" indexed="true"/>
105+ <field name="segment" type="string" stored="true" indexed="true"/>
106+ <field name="digest" type="string" stored="true" indexed="false"/>
107+ <field name="boost" type="float" stored="true" indexed="false"/>
108+ <field name="host" type="domain_name" stored="true" indexed="true"/>
109+ <field name="site" type="string" stored="true" indexed="false"/>
110+ <field name="url" type="string" stored="true" indexed="true" required="true"/>
111+ <field name="content" type="text" stored="true" indexed="true" termVectors="true"/>
112+ <field name="title" type="text" stored="true" indexed="true" termVectors="true"/>
113+ <field name="cache" type="string" stored="true" indexed="false"/>
114+ <field name="tstamp" type="tdate" stored="true" indexed="true"/>
115+ <field name="anchor" type="string" stored="true" indexed="true" multiValued="true"/>
116+ <field name="contentLength" type="tlong" stored="true" indexed="true"/>
117+ <field name="lastModified" type="tdate" stored="true" indexed="true"/>
118+ <field name="lang" type="string" stored="true" indexed="true"/>
119+ <field name="mimetype" type="string" stored="true" indexed="true"/>
120+ <field name="_version_" type="long" indexed="true" stored="true"/>
121+ <!-- multi values -->
122+ <field name="type" type="string" stored="true" indexed="true" multiValued="true"/>
123+ <field name="label" type="string" stored="true" indexed="true" multiValued="true"/>
124+ <field name="role" type="string" stored="true" indexed="true" multiValued="true"/>
125+ <!-- geo search -->
126+ <field name="location" type="location" indexed="true" stored="true"/>
127+ <!-- Language Dynamic field definitions -->
128+ <dynamicField name="*_ar" type="text_ar" indexed="true" stored="true" termVectors="true"/>
129+ <dynamicField name="*_bg" type="text_bg" indexed="true" stored="true" termVectors="true"/>
130+ <dynamicField name="*_ca" type="text_ca" indexed="true" stored="true" termVectors="true"/>
131+ <dynamicField name="*_cjk" type="text_cjk" indexed="true" stored="true" termVectors="true"/>
132+ <dynamicField name="*_cz" type="text_cz" indexed="true" stored="true" termVectors="true"/>
133+ <dynamicField name="*_da" type="text_da" indexed="true" stored="true" termVectors="true"/>
134+ <dynamicField name="*_de" type="text_de" indexed="true" stored="true" termVectors="true"/>
135+ <dynamicField name="*_el" type="text_el" indexed="true" stored="true" termVectors="true"/>
136+ <dynamicField name="*_en" type="text_en" indexed="true" stored="true" termVectors="true"/>
137+ <dynamicField name="*_es" type="text_es" indexed="true" stored="true" termVectors="true"/>
138+ <dynamicField name="*_eu" type="text_eu" indexed="true" stored="true" termVectors="true"/>
139+ <dynamicField name="*_fa" type="text_fa" indexed="true" stored="true" termVectors="true"/>
140+ <dynamicField name="*_fi" type="text_fi" indexed="true" stored="true" termVectors="true"/>
141+ <dynamicField name="*_fr" type="text_fr" indexed="true" stored="true" termVectors="true"/>
142+ <dynamicField name="*_ga" type="text_ga" indexed="true" stored="true" termVectors="true"/>
143+ <dynamicField name="*_gl" type="text_gl" indexed="true" stored="true" termVectors="true"/>
144+ <dynamicField name="*_hi" type="text_hi" indexed="true" stored="true" termVectors="true"/>
145+ <dynamicField name="*_hu" type="text_hu" indexed="true" stored="true" termVectors="true"/>
146+ <dynamicField name="*_hy" type="text_hy" indexed="true" stored="true" termVectors="true"/>
147+ <dynamicField name="*_id" type="text_id" indexed="true" stored="true" termVectors="true"/>
148+ <dynamicField name="*_it" type="text_it" indexed="true" stored="true" termVectors="true"/>
149+ <dynamicField name="*_ja" type="text_ja" indexed="true" stored="true" termVectors="true"/>
150+ <dynamicField name="*_lv" type="text_lv" indexed="true" stored="true" termVectors="true"/>
151+ <dynamicField name="*_nl" type="text_nl" indexed="true" stored="true" termVectors="true"/>
152+ <dynamicField name="*_no" type="text_no" indexed="true" stored="true" termVectors="true"/>
153+ <dynamicField name="*_pt" type="text_pt" indexed="true" stored="true" termVectors="true"/>
154+ <dynamicField name="*_ro" type="text_ro" indexed="true" stored="true" termVectors="true"/>
155+ <dynamicField name="*_ru" type="text_ru" indexed="true" stored="true" termVectors="true"/>
156+ <dynamicField name="*_sv" type="text_sv" indexed="true" stored="true" termVectors="true"/>
157+ <dynamicField name="*_th" type="text_th" indexed="true" stored="true" termVectors="true"/>
158+ <dynamicField name="*_tr" type="text_tr" indexed="true" stored="true" termVectors="true"/>
159+ <dynamicField name="*_ws" type="text_ws" indexed="true" stored="true" termVectors="true"/>
160+ <dynamicField name="*_gosen" type="text_gosen" indexed="true" stored="true" termVectors="true"/>
161+ <!-- Dynamic field definitions -->
162+ <dynamicField name="*_s" type="string" indexed="true" stored="true"/>
163+ <dynamicField name="*_t" type="text" indexed="true" stored="true"/>
164+ <dynamicField name="*_b" type="boolean" indexed="true" stored="true"/>
165+ <dynamicField name="*_i" type="int" indexed="true" stored="true"/>
166+ <dynamicField name="*_l" type="long" indexed="true" stored="true"/>
167+ <dynamicField name="*_f" type="float" indexed="true" stored="true"/>
168+ <dynamicField name="*_d" type="double" indexed="true" stored="true"/>
169+ <dynamicField name="*_dt" type="date" indexed="true" stored="true"/>
170+ <dynamicField name="*_ti" type="tint" indexed="true" stored="true"/>
171+ <dynamicField name="*_tl" type="tlong" indexed="true" stored="true"/>
172+ <dynamicField name="*_tf" type="tfloat" indexed="true" stored="true"/>
173+ <dynamicField name="*_td" type="tdouble" indexed="true" stored="true"/>
174+ <dynamicField name="*_tdt" type="tdate" indexed="true" stored="true"/>
175+ <dynamicField name="*_coordinate" type="tdouble" indexed="true" stored="false"/>
176+ <dynamicField name="ignored_*" type="ignored" multiValued="true"/>
177+ <dynamicField name="random_*" type="random"/>
178+ <dynamicField name="*_t_ar" type="text_ar" indexed="true" stored="true"/>
179+ <dynamicField name="*_t_bg" type="text_bg" indexed="true" stored="true"/>
180+ <dynamicField name="*_t_ca" type="text_ca" indexed="true" stored="true"/>
181+ <dynamicField name="*_t_char_norm" type="text_char_norm" indexed="true" stored="true"/>
182+ <dynamicField name="*_t_cjk" type="text_cjk" indexed="true" stored="true"/>
183+ <dynamicField name="*_t_cz" type="text_cz" indexed="true" stored="true"/>
184+ <dynamicField name="*_t_da" type="text_da" indexed="true" stored="true"/>
185+ <dynamicField name="*_t_de" type="text_de" indexed="true" stored="true"/>
186+ <dynamicField name="*_t_el" type="text_el" indexed="true" stored="true"/>
187+ <dynamicField name="*_t_en" type="text_en" indexed="true" stored="true"/>
188+ <dynamicField name="*_t_en_splitting" type="text_en_splitting" indexed="true" stored="true"/>
189+ <dynamicField name="*_t_en_splitting_tight" type="text_en_splitting_tight" indexed="true" stored="true"/>
190+ <dynamicField name="*_t_es" type="text_es" indexed="true" stored="true"/>
191+ <dynamicField name="*_t_eu" type="text_eu" indexed="true" stored="true"/>
192+ <dynamicField name="*_t_fa" type="text_fa" indexed="true" stored="true"/>
193+ <dynamicField name="*_t_fi" type="text_fi" indexed="true" stored="true"/>
194+ <dynamicField name="*_t_fr" type="text_fr" indexed="true" stored="true"/>
195+ <dynamicField name="*_t_ga" type="text_ga" indexed="true" stored="true"/>
196+ <dynamicField name="*_t_general" type="text_general" indexed="true" stored="true"/>
197+ <dynamicField name="*_t_general_rev" type="text_general_rev" indexed="true" stored="true"/>
198+ <dynamicField name="*_t_gl" type="text_gl" indexed="true" stored="true"/>
199+ <dynamicField name="*_t_gosen" type="text_gosen" indexed="true" stored="true"/>
200+ <dynamicField name="*_t_greek" type="text_greek" indexed="true" stored="true"/>
201+ <dynamicField name="*_t_hi" type="text_hi" indexed="true" stored="true"/>
202+ <dynamicField name="*_t_hu" type="text_hu" indexed="true" stored="true"/>
203+ <dynamicField name="*_t_hy" type="text_hy" indexed="true" stored="true"/>
204+ <dynamicField name="*_t_id" type="text_id" indexed="true" stored="true"/>
205+ <dynamicField name="*_t_it" type="text_it" indexed="true" stored="true"/>
206+ <dynamicField name="*_t_ja" type="text_ja" indexed="true" stored="true"/>
207+ <dynamicField name="*_t_lv" type="text_lv" indexed="true" stored="true"/>
208+ <dynamicField name="*_t_nl" type="text_nl" indexed="true" stored="true"/>
209+ <dynamicField name="*_t_no" type="text_no" indexed="true" stored="true"/>
210+ <dynamicField name="*_t_pt" type="text_pt" indexed="true" stored="true"/>
211+ <dynamicField name="*_t_ro" type="text_ro" indexed="true" stored="true"/>
212+ <dynamicField name="*_t_ru" type="text_ru" indexed="true" stored="true"/>
213+ <dynamicField name="*_t_sv" type="text_sv" indexed="true" stored="true"/>
214+ <dynamicField name="*_t_th" type="text_th" indexed="true" stored="true"/>
215+ <dynamicField name="*_t_tr" type="text_tr" indexed="true" stored="true"/>
216+ <dynamicField name="*_t_ws" type="text_ws" indexed="true" stored="true"/>
217+ <dynamicField name="*_a_path" type="ancestor_path" indexed="true" stored="true"/>
218+ <dynamicField name="*_d_path" type="descendent_path" indexed="true" stored="true"/>
219+ <!-- Dynamic field definitions (Index only) -->
220+ <dynamicField name="*_s_i" type="string" indexed="true" stored="false"/>
221+ <dynamicField name="*_t_i" type="text" indexed="true" stored="false"/>
222+ <dynamicField name="*_b_i" type="boolean" indexed="true" stored="false"/>
223+ <dynamicField name="*_i_i" type="int" indexed="true" stored="false"/>
224+ <dynamicField name="*_l_i" type="long" indexed="true" stored="false"/>
225+ <dynamicField name="*_f_i" type="float" indexed="true" stored="false"/>
226+ <dynamicField name="*_d_i" type="double" indexed="true" stored="false"/>
227+ <dynamicField name="*_ti_i" type="tint" indexed="true" stored="false"/>
228+ <dynamicField name="*_tl_i" type="tlong" indexed="true" stored="false"/>
229+ <dynamicField name="*_tf_i" type="tfloat" indexed="true" stored="false"/>
230+ <dynamicField name="*_td_i" type="tdouble" indexed="true" stored="false"/>
231+ <dynamicField name="*_tdt_i" type="tdate" indexed="true" stored="false"/>
232+ <dynamicField name="*_t_ar_i" type="text_ar" indexed="true" stored="false"/>
233+ <dynamicField name="*_t_bg_i" type="text_bg" indexed="true" stored="false"/>
234+ <dynamicField name="*_t_ca_i" type="text_ca" indexed="true" stored="false"/>
235+ <dynamicField name="*_t_char_norm_i" type="text_char_norm" indexed="true" stored="false"/>
236+ <dynamicField name="*_t_cjk_i" type="text_cjk" indexed="true" stored="false"/>
237+ <dynamicField name="*_t_cz_i" type="text_cz" indexed="true" stored="false"/>
238+ <dynamicField name="*_t_da_i" type="text_da" indexed="true" stored="false"/>
239+ <dynamicField name="*_t_de_i" type="text_de" indexed="true" stored="false"/>
240+ <dynamicField name="*_t_el_i" type="text_el" indexed="true" stored="false"/>
241+ <dynamicField name="*_t_en_i" type="text_en" indexed="true" stored="false"/>
242+ <dynamicField name="*_t_en_splitting_i" type="text_en_splitting" indexed="true" stored="false"/>
243+ <dynamicField name="*_t_en_splitting_tight_i" type="text_en_splitting_tight" indexed="true" stored="false"/>
244+ <dynamicField name="*_t_es_i" type="text_es" indexed="true" stored="false"/>
245+ <dynamicField name="*_t_eu_i" type="text_eu" indexed="true" stored="false"/>
246+ <dynamicField name="*_t_fa_i" type="text_fa" indexed="true" stored="false"/>
247+ <dynamicField name="*_t_fi_i" type="text_fi" indexed="true" stored="false"/>
248+ <dynamicField name="*_t_fr_i" type="text_fr" indexed="true" stored="false"/>
249+ <dynamicField name="*_t_ga_i" type="text_ga" indexed="true" stored="false"/>
250+ <dynamicField name="*_t_general_i" type="text_general" indexed="true" stored="false"/>
251+ <dynamicField name="*_t_general_rev_i" type="text_general_rev" indexed="true" stored="false"/>
252+ <dynamicField name="*_t_gl_i" type="text_gl" indexed="true" stored="false"/>
253+ <dynamicField name="*_t_gosen_i" type="text_gosen" indexed="true" stored="false"/>
254+ <dynamicField name="*_t_greek_i" type="text_greek" indexed="true" stored="false"/>
255+ <dynamicField name="*_t_hi_i" type="text_hi" indexed="true" stored="false"/>
256+ <dynamicField name="*_t_hu_i" type="text_hu" indexed="true" stored="false"/>
257+ <dynamicField name="*_t_hy_i" type="text_hy" indexed="true" stored="false"/>
258+ <dynamicField name="*_t_id_i" type="text_id" indexed="true" stored="false"/>
259+ <dynamicField name="*_t_it_i" type="text_it" indexed="true" stored="false"/>
260+ <dynamicField name="*_t_ja_i" type="text_ja" indexed="true" stored="false"/>
261+ <dynamicField name="*_t_lv_i" type="text_lv" indexed="true" stored="false"/>
262+ <dynamicField name="*_t_nl_i" type="text_nl" indexed="true" stored="false"/>
263+ <dynamicField name="*_t_no_i" type="text_no" indexed="true" stored="false"/>
264+ <dynamicField name="*_t_pt_i" type="text_pt" indexed="true" stored="false"/>
265+ <dynamicField name="*_t_ro_i" type="text_ro" indexed="true" stored="false"/>
266+ <dynamicField name="*_t_ru_i" type="text_ru" indexed="true" stored="false"/>
267+ <dynamicField name="*_t_sv_i" type="text_sv" indexed="true" stored="false"/>
268+ <dynamicField name="*_t_th_i" type="text_th" indexed="true" stored="false"/>
269+ <dynamicField name="*_t_tr_i" type="text_tr" indexed="true" stored="false"/>
270+ <dynamicField name="*_t_ws_i" type="text_ws" indexed="true" stored="false"/>
271+ <dynamicField name="*_i_a_path" type="ancestor_path" indexed="true" stored="false"/>
272+ <dynamicField name="*_i_d_path" type="descendent_path" indexed="true" stored="false"/>
273+ <!-- Dynamic field definitions (Store only) -->
274+ <dynamicField name="*_s_s" type="string" indexed="false" stored="true"/>
275+ <dynamicField name="*_t_s" type="text" indexed="false" stored="true"/>
276+ <dynamicField name="*_b_s" type="boolean" indexed="false" stored="true"/>
277+ <dynamicField name="*_i_s" type="int" indexed="false" stored="true"/>
278+ <dynamicField name="*_l_s" type="long" indexed="false" stored="true"/>
279+ <dynamicField name="*_f_s" type="float" indexed="false" stored="true"/>
280+ <dynamicField name="*_d_s" type="double" indexed="false" stored="true"/>
281+ <dynamicField name="*_ti_s" type="tint" indexed="false" stored="true"/>
282+ <dynamicField name="*_tl_s" type="tlong" indexed="false" stored="true"/>
283+ <dynamicField name="*_tf_s" type="tfloat" indexed="false" stored="true"/>
284+ <dynamicField name="*_td_s" type="tdouble" indexed="false" stored="true"/>
285+ <dynamicField name="*_tdt_s" type="tdate" indexed="false" stored="true"/>
286+ <!-- Dynamic multi-valued field definitions -->
287+ <dynamicField name="*_s_m" type="string" indexed="true" stored="true" multiValued="true"/>
288+ <dynamicField name="*_t_m" type="text" indexed="true" stored="true" multiValued="true"/>
289+ <dynamicField name="*_b_m" type="boolean" indexed="true" stored="true" multiValued="true"/>
290+ <dynamicField name="*_i_m" type="int" indexed="true" stored="true" multiValued="true"/>
291+ <dynamicField name="*_l_m" type="long" indexed="true" stored="true" multiValued="true"/>
292+ <dynamicField name="*_f_m" type="float" indexed="true" stored="true" multiValued="true"/>
293+ <dynamicField name="*_d_m" type="double" indexed="true" stored="true" multiValued="true"/>
294+ <dynamicField name="*_dt_m" type="date" indexed="true" stored="true" multiValued="true"/>
295+ <dynamicField name="*_ti_m" type="tint" indexed="true" stored="true" multiValued="true"/>
296+ <dynamicField name="*_tl_m" type="tlong" indexed="true" stored="true" multiValued="true"/>
297+ <dynamicField name="*_tf_m" type="tfloat" indexed="true" stored="true" multiValued="true"/>
298+ <dynamicField name="*_td_m" type="tdouble" indexed="true" stored="true" multiValued="true"/>
299+ <dynamicField name="*_tdt_m" type="tdate" indexed="true" stored="true" multiValued="true"/>
300+ <dynamicField name="*_t_ar_m" type="text_ar" indexed="true" stored="true" multiValued="true"/>
301+ <dynamicField name="*_t_bg_m" type="text_bg" indexed="true" stored="true" multiValued="true"/>
302+ <dynamicField name="*_t_ca_m" type="text_ca" indexed="true" stored="true" multiValued="true"/>
303+ <dynamicField name="*_t_char_norm_m" type="text_char_norm" indexed="true" stored="true" multiValued="true"/>
304+ <dynamicField name="*_t_cjk_m" type="text_cjk" indexed="true" stored="true" multiValued="true"/>
305+ <dynamicField name="*_t_cz_m" type="text_cz" indexed="true" stored="true" multiValued="true"/>
306+ <dynamicField name="*_t_da_m" type="text_da" indexed="true" stored="true" multiValued="true"/>
307+ <dynamicField name="*_t_de_m" type="text_de" indexed="true" stored="true" multiValued="true"/>
308+ <dynamicField name="*_t_el_m" type="text_el" indexed="true" stored="true" multiValued="true"/>
309+ <dynamicField name="*_t_en_m" type="text_en" indexed="true" stored="true" multiValued="true"/>
310+ <dynamicField name="*_t_en_splitting_m" type="text_en_splitting" indexed="true" stored="true" multiValued="true"/>
311+ <dynamicField name="*_t_en_splitting_tight_m" type="text_en_splitting_tight" indexed="true" stored="true" multiValued="true"/>
312+ <dynamicField name="*_t_es_m" type="text_es" indexed="true" stored="true" multiValued="true"/>
313+ <dynamicField name="*_t_eu_m" type="text_eu" indexed="true" stored="true" multiValued="true"/>
314+ <dynamicField name="*_t_fa_m" type="text_fa" indexed="true" stored="true" multiValued="true"/>
315+ <dynamicField name="*_t_fi_m" type="text_fi" indexed="true" stored="true" multiValued="true"/>
316+ <dynamicField name="*_t_fr_m" type="text_fr" indexed="true" stored="true" multiValued="true"/>
317+ <dynamicField name="*_t_ga_m" type="text_ga" indexed="true" stored="true" multiValued="true"/>
318+ <dynamicField name="*_t_general_m" type="text_general" indexed="true" stored="true" multiValued="true"/>
319+ <dynamicField name="*_t_general_rev_m" type="text_general_rev" indexed="true" stored="true" multiValued="true"/>
320+ <dynamicField name="*_t_gl_m" type="text_gl" indexed="true" stored="true" multiValued="true"/>
321+ <dynamicField name="*_t_gosen_m" type="text_gosen" indexed="true" stored="true" multiValued="true"/>
322+ <dynamicField name="*_t_greek_m" type="text_greek" indexed="true" stored="true" multiValued="true"/>
323+ <dynamicField name="*_t_hi_m" type="text_hi" indexed="true" stored="true" multiValued="true"/>
324+ <dynamicField name="*_t_hu_m" type="text_hu" indexed="true" stored="true" multiValued="true"/>
325+ <dynamicField name="*_t_hy_m" type="text_hy" indexed="true" stored="true" multiValued="true"/>
326+ <dynamicField name="*_t_id_m" type="text_id" indexed="true" stored="true" multiValued="true"/>
327+ <dynamicField name="*_t_it_m" type="text_it" indexed="true" stored="true" multiValued="true"/>
328+ <dynamicField name="*_t_ja_m" type="text_ja" indexed="true" stored="true" multiValued="true"/>
329+ <dynamicField name="*_t_lv_m" type="text_lv" indexed="true" stored="true" multiValued="true"/>
330+ <dynamicField name="*_t_nl_m" type="text_nl" indexed="true" stored="true" multiValued="true"/>
331+ <dynamicField name="*_t_no_m" type="text_no" indexed="true" stored="true" multiValued="true"/>
332+ <dynamicField name="*_t_pt_m" type="text_pt" indexed="true" stored="true" multiValued="true"/>
333+ <dynamicField name="*_t_ro_m" type="text_ro" indexed="true" stored="true" multiValued="true"/>
334+ <dynamicField name="*_t_ru_m" type="text_ru" indexed="true" stored="true" multiValued="true"/>
335+ <dynamicField name="*_t_sv_m" type="text_sv" indexed="true" stored="true" multiValued="true"/>
336+ <dynamicField name="*_t_th_m" type="text_th" indexed="true" stored="true" multiValued="true"/>
337+ <dynamicField name="*_t_tr_m" type="text_tr" indexed="true" stored="true" multiValued="true"/>
338+ <dynamicField name="*_t_ws_m" type="text_ws" indexed="true" stored="true" multiValued="true"/>
339+ <dynamicField name="*_a_path_m" type="ancestor_path" indexed="true" stored="true" multiValued="true"/>
340+ <dynamicField name="*_d_path_m" type="descendent_path" indexed="true" stored="true" multiValued="true"/>
341+ <!-- Dynamic multi-valued field definitions (Index only) -->
342+ <dynamicField name="*_s_i_m" type="string" indexed="true" stored="false" multiValued="true"/>
343+ <dynamicField name="*_t_i_m" type="text" indexed="true" stored="false" multiValued="true"/>
344+ <dynamicField name="*_b_i_m" type="boolean" indexed="true" stored="false" multiValued="true"/>
345+ <dynamicField name="*_i_i_m" type="int" indexed="true" stored="false" multiValued="true"/>
346+ <dynamicField name="*_l_i_m" type="long" indexed="true" stored="false" multiValued="true"/>
347+ <dynamicField name="*_f_i_m" type="float" indexed="true" stored="false" multiValued="true"/>
348+ <dynamicField name="*_d_i_m" type="double" indexed="true" stored="false" multiValued="true"/>
349+ <dynamicField name="*_ti_i_m" type="tint" indexed="true" stored="false" multiValued="true"/>
350+ <dynamicField name="*_tl_i_m" type="tlong" indexed="true" stored="false" multiValued="true"/>
351+ <dynamicField name="*_tf_i_m" type="tfloat" indexed="true" stored="false" multiValued="true"/>
352+ <dynamicField name="*_td_i_m" type="tdouble" indexed="true" stored="false" multiValued="true"/>
353+ <dynamicField name="*_tdt_i_m" type="tdate" indexed="true" stored="false" multiValued="true"/>
354+ <dynamicField name="*_t_ar_i_m" type="text_ar" indexed="true" stored="false" multiValued="true"/>
355+ <dynamicField name="*_t_bg_i_m" type="text_bg" indexed="true" stored="false" multiValued="true"/>
356+ <dynamicField name="*_t_ca_i_m" type="text_ca" indexed="true" stored="false" multiValued="true"/>
357+ <dynamicField name="*_t_char_norm_i_m" type="text_char_norm" indexed="true" stored="false" multiValued="true"/>
358+ <dynamicField name="*_t_cjk_i_m" type="text_cjk" indexed="true" stored="false" multiValued="true"/>
359+ <dynamicField name="*_t_cz_i_m" type="text_cz" indexed="true" stored="false" multiValued="true"/>
360+ <dynamicField name="*_t_da_i_m" type="text_da" indexed="true" stored="false" multiValued="true"/>
361+ <dynamicField name="*_t_de_i_m" type="text_de" indexed="true" stored="false" multiValued="true"/>
362+ <dynamicField name="*_t_el_i_m" type="text_el" indexed="true" stored="false" multiValued="true"/>
363+ <dynamicField name="*_t_en_i_m" type="text_en" indexed="true" stored="false" multiValued="true"/>
364+ <dynamicField name="*_t_en_splitting_i_m" type="text_en_splitting" indexed="true" stored="false" multiValued="true"/>
365+ <dynamicField name="*_t_en_splitting_tight_i_m" type="text_en_splitting_tight" indexed="true" stored="false" multiValued="true"/>
366+ <dynamicField name="*_t_es_i_m" type="text_es" indexed="true" stored="false" multiValued="true"/>
367+ <dynamicField name="*_t_eu_i_m" type="text_eu" indexed="true" stored="false" multiValued="true"/>
368+ <dynamicField name="*_t_fa_i_m" type="text_fa" indexed="true" stored="false" multiValued="true"/>
369+ <dynamicField name="*_t_fi_i_m" type="text_fi" indexed="true" stored="false" multiValued="true"/>
370+ <dynamicField name="*_t_fr_i_m" type="text_fr" indexed="true" stored="false" multiValued="true"/>
371+ <dynamicField name="*_t_ga_i_m" type="text_ga" indexed="true" stored="false" multiValued="true"/>
372+ <dynamicField name="*_t_general_i_m" type="text_general" indexed="true" stored="false" multiValued="true"/>
373+ <dynamicField name="*_t_general_rev_i_m" type="text_general_rev" indexed="true" stored="false" multiValued="true"/>
374+ <dynamicField name="*_t_gl_i_m" type="text_gl" indexed="true" stored="false" multiValued="true"/>
375+ <dynamicField name="*_t_gosen_i_m" type="text_gosen" indexed="true" stored="false" multiValued="true"/>
376+ <dynamicField name="*_t_greek_i_m" type="text_greek" indexed="true" stored="false" multiValued="true"/>
377+ <dynamicField name="*_t_hi_i_m" type="text_hi" indexed="true" stored="false" multiValued="true"/>
378+ <dynamicField name="*_t_hu_i_m" type="text_hu" indexed="true" stored="false" multiValued="true"/>
379+ <dynamicField name="*_t_hy_i_m" type="text_hy" indexed="true" stored="false" multiValued="true"/>
380+ <dynamicField name="*_t_id_i_m" type="text_id" indexed="true" stored="false" multiValued="true"/>
381+ <dynamicField name="*_t_it_i_m" type="text_it" indexed="true" stored="false" multiValued="true"/>
382+ <dynamicField name="*_t_ja_i_m" type="text_ja" indexed="true" stored="false" multiValued="true"/>
383+ <dynamicField name="*_t_lv_i_m" type="text_lv" indexed="true" stored="false" multiValued="true"/>
384+ <dynamicField name="*_t_nl_i_m" type="text_nl" indexed="true" stored="false" multiValued="true"/>
385+ <dynamicField name="*_t_no_i_m" type="text_no" indexed="true" stored="false" multiValued="true"/>
386+ <dynamicField name="*_t_pt_i_m" type="text_pt" indexed="true" stored="false" multiValued="true"/>
387+ <dynamicField name="*_t_ro_i_m" type="text_ro" indexed="true" stored="false" multiValued="true"/>
388+ <dynamicField name="*_t_ru_i_m" type="text_ru" indexed="true" stored="false" multiValued="true"/>
389+ <dynamicField name="*_t_sv_i_m" type="text_sv" indexed="true" stored="false" multiValued="true"/>
390+ <dynamicField name="*_t_th_i_m" type="text_th" indexed="true" stored="false" multiValued="true"/>
391+ <dynamicField name="*_t_tr_i_m" type="text_tr" indexed="true" stored="false" multiValued="true"/>
392+ <dynamicField name="*_t_ws_i_m" type="text_ws" indexed="true" stored="false" multiValued="true"/>
393+ <dynamicField name="*_a_path_i_m" type="ancestor_path" indexed="true" stored="false" multiValued="true"/>
394+ <dynamicField name="*_d_path_i_m" type="descendent_path" indexed="true" stored="false" multiValued="true"/>
395+ <!-- Dynamic multi-valued field definitions (Store only) -->
396+ <dynamicField name="*_s_s_m" type="string" indexed="false" stored="true" multiValued="true"/>
397+ <dynamicField name="*_t_s_m" type="text" indexed="false" stored="true" multiValued="true"/>
398+ <dynamicField name="*_b_s_m" type="boolean" indexed="false" stored="true" multiValued="true"/>
399+ <dynamicField name="*_i_s_m" type="int" indexed="false" stored="true" multiValued="true"/>
400+ <dynamicField name="*_l_s_m" type="long" indexed="false" stored="true" multiValued="true"/>
401+ <dynamicField name="*_f_s_m" type="float" indexed="false" stored="true" multiValued="true"/>
402+ <dynamicField name="*_d_s_m" type="double" indexed="false" stored="true" multiValued="true"/>
403+ <dynamicField name="*_ti_s_m" type="tint" indexed="false" stored="true" multiValued="true"/>
404+ <dynamicField name="*_tl_s_m" type="tlong" indexed="false" stored="true" multiValued="true"/>
405+ <dynamicField name="*_tf_s_m" type="tfloat" indexed="false" stored="true" multiValued="true"/>
406+ <dynamicField name="*_td_s_m" type="tdouble" indexed="false" stored="true" multiValued="true"/>
407+ <dynamicField name="*_tdt_s_m" type="tdate" indexed="false" stored="true" multiValued="true"/>
408+ <!-- Dynamic field definitions (compatibility) -->
409+ <dynamicField name="*_pi" type="pint" indexed="true" stored="true"/>
410+ <dynamicField name="*_pl" type="plong" indexed="true" stored="true"/>
411+ <dynamicField name="*_pf" type="pfloat" indexed="true" stored="true"/>
412+ <dynamicField name="*_pd" type="pdouble" indexed="true" stored="true"/>
413+ <dynamicField name="*_pdt" type="pdate" indexed="true" stored="true"/>
414+ <dynamicField name="*_tg" type="text_gosen" indexed="true" stored="true"/>
415+ <dynamicField name="*_tg_i" type="text_gosen" indexed="true" stored="false"/>
416+ <dynamicField name="*_tg_s" type="text_gosen" indexed="false" stored="true"/>
417+ <dynamicField name="*_tg_m" type="text_gosen" indexed="true" stored="true" multiValued="true"/>
418+ <dynamicField name="*_tg_i_m" type="text_gosen" indexed="true" stored="false" multiValued="true"/>
419+ <dynamicField name="*_tg_s_m" type="text_gosen" indexed="false" stored="true" multiValued="true"/>
420+
421+ <!-- Suggest -->
422+ <dynamicField name="*_ts" type="text_suggest" indexed="true" stored="true"/>
423+ <dynamicField name="*_ss" type="string_suggest" indexed="true" stored="true"/>
424+<!--
425+ <copyField source="content" dest="content_ts"/>
426+ <copyField source="title" dest="title_ss"/>
427+-->
428+
429+ </fields>
430+
431+ <!-- Field to use to determine and enforce document uniqueness.
432+ Unless this field is marked with required="false", it will be a required field
433+ -->
434+ <uniqueKey>id</uniqueKey>
435+
436+ <types>
437+ <!-- field type definitions. The "name" attribute is
438+ just a label to be used by field definitions. The "class"
439+ attribute and any other attributes determine the real
440+ behavior of the fieldType.
441+ Class names starting with "solr" refer to java classes in a
442+ standard package such as org.apache.solr.analysis
443+ -->
444+
445+ <!-- The StrField type is not analyzed, but indexed/stored verbatim.
446+ It supports doc values but in that case the field needs to be
447+ single-valued and either required or have a default value.
448+ -->
449+ <fieldType name="string" class="solr.StrField" sortMissingLast="true" />
450+
451+ <!-- boolean type: "true" or "false" -->
452+ <fieldType name="boolean" class="solr.BoolField" sortMissingLast="true"/>
453+
454+ <!-- sortMissingLast and sortMissingFirst attributes are optional attributes are
455+ currently supported on types that are sorted internally as strings
456+ and on numeric types.
457+ This includes "string","boolean", and, as of 3.5 (and 4.x),
458+ int, float, long, date, double, including the "Trie" variants.
459+ - If sortMissingLast="true", then a sort on this field will cause documents
460+ without the field to come after documents with the field,
461+ regardless of the requested sort order (asc or desc).
462+ - If sortMissingFirst="true", then a sort on this field will cause documents
463+ without the field to come before documents with the field,
464+ regardless of the requested sort order.
465+ - If sortMissingLast="false" and sortMissingFirst="false" (the default),
466+ then default lucene sorting will be used which places docs without the
467+ field first in an ascending sort and last in a descending sort.
468+ -->
469+
470+ <!--
471+ Default numeric field types. For faster range queries, consider the tint/tfloat/tlong/tdouble types.
472+
473+ These fields support doc values, but they require the field to be
474+ single-valued and either be required or have a default value.
475+ -->
476+ <fieldType name="int" class="solr.TrieIntField" precisionStep="0" positionIncrementGap="0"/>
477+ <fieldType name="float" class="solr.TrieFloatField" precisionStep="0" positionIncrementGap="0"/>
478+ <fieldType name="long" class="solr.TrieLongField" precisionStep="0" positionIncrementGap="0"/>
479+ <fieldType name="double" class="solr.TrieDoubleField" precisionStep="0" positionIncrementGap="0"/>
480+
481+ <!--
482+ Numeric field types that index each value at various levels of precision
483+ to accelerate range queries when the number of values between the range
484+ endpoints is large. See the javadoc for NumericRangeQuery for internal
485+ implementation details.
486+
487+ Smaller precisionStep values (specified in bits) will lead to more tokens
488+ indexed per value, slightly larger index size, and faster range queries.
489+ A precisionStep of 0 disables indexing at different precision levels.
490+ -->
491+ <fieldType name="tint" class="solr.TrieIntField" precisionStep="8" positionIncrementGap="0"/>
492+ <fieldType name="tfloat" class="solr.TrieFloatField" precisionStep="8" positionIncrementGap="0"/>
493+ <fieldType name="tlong" class="solr.TrieLongField" precisionStep="8" positionIncrementGap="0"/>
494+ <fieldType name="tdouble" class="solr.TrieDoubleField" precisionStep="8" positionIncrementGap="0"/>
495+
496+ <!-- The format for this date field is of the form 1995-12-31T23:59:59Z, and
497+ is a more restricted form of the canonical representation of dateTime
498+ http://www.w3.org/TR/xmlschema-2/#dateTime
499+ The trailing "Z" designates UTC time and is mandatory.
500+ Optional fractional seconds are allowed: 1995-12-31T23:59:59.999Z
501+ All other components are mandatory.
502+
503+ Expressions can also be used to denote calculations that should be
504+ performed relative to "NOW" to determine the value, ie...
505+
506+ NOW/HOUR
507+ ... Round to the start of the current hour
508+ NOW-1DAY
509+ ... Exactly 1 day prior to now
510+ NOW/DAY+6MONTHS+3DAYS
511+ ... 6 months and 3 days in the future from the start of
512+ the current day
513+
514+ Consult the DateField javadocs for more information.
515+
516+ Note: For faster range queries, consider the tdate type
517+ -->
518+ <fieldType name="date" class="solr.TrieDateField" precisionStep="0" positionIncrementGap="0"/>
519+
520+ <!-- A Trie based date field for faster date range queries and date faceting. -->
521+ <fieldType name="tdate" class="solr.TrieDateField" precisionStep="6" positionIncrementGap="0"/>
522+
523+
524+ <!--Binary data type. The data should be sent/retrieved in as Base64 encoded Strings -->
525+ <fieldtype name="binary" class="solr.BinaryField"/>
526+
527+ <!--
528+ Note:
529+ These should only be used for compatibility with existing indexes (created with lucene or older Solr versions).
530+ Use Trie based fields instead. As of Solr 3.5 and 4.x, Trie based fields support sortMissingFirst/Last
531+
532+ Plain numeric field types that store and index the text
533+ value verbatim (and hence don't correctly support range queries, since the
534+ lexicographic ordering isn't equal to the numeric ordering)
535+ -->
536+ <fieldType name="pint" class="solr.IntField"/>
537+ <fieldType name="plong" class="solr.LongField"/>
538+ <fieldType name="pfloat" class="solr.FloatField"/>
539+ <fieldType name="pdouble" class="solr.DoubleField"/>
540+ <fieldType name="pdate" class="solr.DateField" sortMissingLast="true"/>
541+
542+ <!-- The "RandomSortField" is not used to store or search any
543+ data. You can declare fields of this type it in your schema
544+ to generate pseudo-random orderings of your docs for sorting
545+ or function purposes. The ordering is generated based on the field
546+ name and the version of the index. As long as the index version
547+ remains unchanged, and the same field name is reused,
548+ the ordering of the docs will be consistent.
549+ If you want different psuedo-random orderings of documents,
550+ for the same version of the index, use a dynamicField and
551+ change the field name in the request.
552+ -->
553+ <fieldType name="random" class="solr.RandomSortField" indexed="true" />
554+
555+ <!-- solr.TextField allows the specification of custom text analyzers
556+ specified as a tokenizer and a list of token filters. Different
557+ analyzers may be specified for indexing and querying.
558+
559+ The optional positionIncrementGap puts space between multiple fields of
560+ this type on the same document, with the purpose of preventing false phrase
561+ matching across fields.
562+
563+ For more info on customizing your analyzer chain, please see
564+ http://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters
565+ -->
566+
567+ <!-- One can also specify an existing Analyzer class that has a
568+ default constructor via the class attribute on the analyzer element.
569+ Example:
570+ -->
571+ <fieldType name="text_greek" class="solr.TextField">
572+ <analyzer class="org.apache.lucene.analysis.el.GreekAnalyzer"/>
573+ </fieldType>
574+
575+ <!-- A text field that only splits on whitespace for exact matching of words -->
576+ <fieldType name="text_ws" class="solr.TextField" positionIncrementGap="100">
577+ <analyzer>
578+ <tokenizer class="solr.WhitespaceTokenizerFactory"/>
579+ </analyzer>
580+ </fieldType>
581+
582+ <!-- A general text field that has reasonable, generic
583+ cross-language defaults: it tokenizes with StandardTokenizer,
584+ removes stop words from case-insensitive "stopwords.txt"
585+ (empty by default), and down cases. At query time only, it
586+ also applies synonyms. -->
587+ <fieldType name="text_general" class="solr.TextField" positionIncrementGap="100">
588+ <analyzer type="index">
589+ <tokenizer class="solr.StandardTokenizerFactory"/>
590+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
591+ <!-- in this example, we will only use synonyms at query time
592+ <filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/>
593+ -->
594+ <filter class="solr.LowerCaseFilterFactory"/>
595+ </analyzer>
596+ <analyzer type="query">
597+ <tokenizer class="solr.StandardTokenizerFactory"/>
598+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
599+ <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
600+ <filter class="solr.LowerCaseFilterFactory"/>
601+ </analyzer>
602+ </fieldType>
603+
604+ <!-- A text field with defaults appropriate for English: it
605+ tokenizes with StandardTokenizer, removes English stop words
606+ (lang/stopwords_en.txt), down cases, protects words from protwords.txt, and
607+ finally applies Porter's stemming. The query time analyzer
608+ also applies synonyms from synonyms.txt. -->
609+ <fieldType name="text_en" class="solr.TextField" positionIncrementGap="100">
610+ <analyzer type="index">
611+ <tokenizer class="solr.StandardTokenizerFactory"/>
612+ <!-- in this example, we will only use synonyms at query time
613+ <filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/>
614+ -->
615+ <!-- Case insensitive stop word removal.
616+ -->
617+ <filter class="solr.StopFilterFactory"
618+ ignoreCase="true"
619+ words="lang/stopwords_en.txt"
620+ />
621+ <filter class="solr.LowerCaseFilterFactory"/>
622+ <filter class="solr.EnglishPossessiveFilterFactory"/>
623+ <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
624+ <!-- Optionally you may want to use this less aggressive stemmer instead of PorterStemFilterFactory:
625+ <filter class="solr.EnglishMinimalStemFilterFactory"/>
626+ -->
627+ <filter class="solr.PorterStemFilterFactory"/>
628+ </analyzer>
629+ <analyzer type="query">
630+ <tokenizer class="solr.StandardTokenizerFactory"/>
631+ <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
632+ <filter class="solr.StopFilterFactory"
633+ ignoreCase="true"
634+ words="lang/stopwords_en.txt"
635+ />
636+ <filter class="solr.LowerCaseFilterFactory"/>
637+ <filter class="solr.EnglishPossessiveFilterFactory"/>
638+ <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
639+ <!-- Optionally you may want to use this less aggressive stemmer instead of PorterStemFilterFactory:
640+ <filter class="solr.EnglishMinimalStemFilterFactory"/>
641+ -->
642+ <filter class="solr.PorterStemFilterFactory"/>
643+ </analyzer>
644+ </fieldType>
645+
646+ <!-- A text field with defaults appropriate for English, plus
647+ aggressive word-splitting and autophrase features enabled.
648+ This field is just like text_en, except it adds
649+ WordDelimiterFilter to enable splitting and matching of
650+ words on case-change, alpha numeric boundaries, and
651+ non-alphanumeric chars. This means certain compound word
652+ cases will work, for example query "wi fi" will match
653+ document "WiFi" or "wi-fi".
654+ -->
655+ <fieldType name="text_en_splitting" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="true">
656+ <analyzer type="index">
657+ <tokenizer class="solr.WhitespaceTokenizerFactory"/>
658+ <!-- in this example, we will only use synonyms at query time
659+ <filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/>
660+ -->
661+ <!-- Case insensitive stop word removal.
662+ -->
663+ <filter class="solr.StopFilterFactory"
664+ ignoreCase="true"
665+ words="lang/stopwords_en.txt"
666+ />
667+ <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1"/>
668+ <filter class="solr.LowerCaseFilterFactory"/>
669+ <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
670+ <filter class="solr.PorterStemFilterFactory"/>
671+ </analyzer>
672+ <analyzer type="query">
673+ <tokenizer class="solr.WhitespaceTokenizerFactory"/>
674+ <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
675+ <filter class="solr.StopFilterFactory"
676+ ignoreCase="true"
677+ words="lang/stopwords_en.txt"
678+ />
679+ <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1"/>
680+ <filter class="solr.LowerCaseFilterFactory"/>
681+ <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
682+ <filter class="solr.PorterStemFilterFactory"/>
683+ </analyzer>
684+ </fieldType>
685+
686+ <!-- Less flexible matching, but less false matches. Probably not ideal for product names,
687+ but may be good for SKUs. Can insert dashes in the wrong place and still match. -->
688+ <fieldType name="text_en_splitting_tight" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="true">
689+ <analyzer>
690+ <tokenizer class="solr.WhitespaceTokenizerFactory"/>
691+ <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="false"/>
692+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_en.txt"/>
693+ <filter class="solr.WordDelimiterFilterFactory" generateWordParts="0" generateNumberParts="0" catenateWords="1" catenateNumbers="1" catenateAll="0"/>
694+ <filter class="solr.LowerCaseFilterFactory"/>
695+ <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
696+ <filter class="solr.EnglishMinimalStemFilterFactory"/>
697+ <!-- this filter can remove any duplicate tokens that appear at the same position - sometimes
698+ possible with WordDelimiterFilter in conjuncton with stemming. -->
699+ <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
700+ </analyzer>
701+ </fieldType>
702+
703+ <!-- Just like text_general except it reverses the characters of
704+ each token, to enable more efficient leading wildcard queries. -->
705+ <fieldType name="text_general_rev" class="solr.TextField" positionIncrementGap="100">
706+ <analyzer type="index">
707+ <tokenizer class="solr.StandardTokenizerFactory"/>
708+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
709+ <filter class="solr.LowerCaseFilterFactory"/>
710+ <filter class="solr.ReversedWildcardFilterFactory" withOriginal="true"
711+ maxPosAsterisk="3" maxPosQuestion="2" maxFractionAsterisk="0.33"/>
712+ </analyzer>
713+ <analyzer type="query">
714+ <tokenizer class="solr.StandardTokenizerFactory"/>
715+ <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
716+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
717+ <filter class="solr.LowerCaseFilterFactory"/>
718+ </analyzer>
719+ </fieldType>
720+
721+ <!-- charFilter + WhitespaceTokenizer -->
722+ <fieldType name="text_char_norm" class="solr.TextField" positionIncrementGap="100" >
723+ <analyzer>
724+ <charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt"/>
725+ <tokenizer class="solr.WhitespaceTokenizerFactory"/>
726+ </analyzer>
727+ </fieldType>
728+
729+ <!-- This is an example of using the KeywordTokenizer along
730+ With various TokenFilterFactories to produce a sortable field
731+ that does not include some properties of the source text
732+ -->
733+ <fieldType name="alphaOnlySort" class="solr.TextField" sortMissingLast="true" omitNorms="true">
734+ <analyzer>
735+ <!-- KeywordTokenizer does no actual tokenizing, so the entire
736+ input string is preserved as a single token
737+ -->
738+ <tokenizer class="solr.KeywordTokenizerFactory"/>
739+ <!-- The LowerCase TokenFilter does what you expect, which can be
740+ when you want your sorting to be case insensitive
741+ -->
742+ <filter class="solr.LowerCaseFilterFactory" />
743+ <!-- The TrimFilter removes any leading or trailing whitespace -->
744+ <filter class="solr.TrimFilterFactory" />
745+ <!-- The PatternReplaceFilter gives you the flexibility to use
746+ Java Regular expression to replace any sequence of characters
747+ matching a pattern with an arbitrary replacement string,
748+ which may include back references to portions of the original
749+ string matched by the pattern.
750+
751+ See the Java Regular Expression documentation for more
752+ information on pattern and replacement string syntax.
753+
754+ http://java.sun.com/j2se/1.6.0/docs/api/java/util/regex/package-summary.html
755+ -->
756+ <filter class="solr.PatternReplaceFilterFactory"
757+ pattern="([^a-z])" replacement="" replace="all"
758+ />
759+ </analyzer>
760+ </fieldType>
761+
762+ <fieldtype name="phonetic" stored="false" indexed="true" class="solr.TextField" >
763+ <analyzer>
764+ <tokenizer class="solr.StandardTokenizerFactory"/>
765+ <filter class="solr.DoubleMetaphoneFilterFactory" inject="false"/>
766+ </analyzer>
767+ </fieldtype>
768+
769+ <fieldtype name="payloads" stored="false" indexed="true" class="solr.TextField" >
770+ <analyzer>
771+ <tokenizer class="solr.WhitespaceTokenizerFactory"/>
772+ <!--
773+ The DelimitedPayloadTokenFilter can put payloads on tokens... for example,
774+ a token of "foo|1.4" would be indexed as "foo" with a payload of 1.4f
775+ Attributes of the DelimitedPayloadTokenFilterFactory :
776+ "delimiter" - a one character delimiter. Default is | (pipe)
777+ "encoder" - how to encode the following value into a playload
778+ float -> org.apache.lucene.analysis.payloads.FloatEncoder,
779+ integer -> o.a.l.a.p.IntegerEncoder
780+ identity -> o.a.l.a.p.IdentityEncoder
781+ Fully Qualified class name implementing PayloadEncoder, Encoder must have a no arg constructor.
782+ -->
783+ <filter class="solr.DelimitedPayloadTokenFilterFactory" encoder="float"/>
784+ </analyzer>
785+ </fieldtype>
786+
787+ <!-- lowercases the entire field value, keeping it as a single token. -->
788+ <fieldType name="lowercase" class="solr.TextField" positionIncrementGap="100">
789+ <analyzer>
790+ <tokenizer class="solr.KeywordTokenizerFactory"/>
791+ <filter class="solr.LowerCaseFilterFactory" />
792+ </analyzer>
793+ </fieldType>
794+
795+ <!--
796+ Example of using PathHierarchyTokenizerFactory at index time, so
797+ queries for paths match documents at that path, or in descendent paths
798+ -->
799+ <fieldType name="descendent_path" class="solr.TextField">
800+ <analyzer type="index">
801+ <tokenizer class="solr.PathHierarchyTokenizerFactory" delimiter="/" />
802+ </analyzer>
803+ <analyzer type="query">
804+ <tokenizer class="solr.KeywordTokenizerFactory" />
805+ </analyzer>
806+ </fieldType>
807+ <!--
808+ Example of using PathHierarchyTokenizerFactory at query time, so
809+ queries for paths match documents at that path, or in ancestor paths
810+ -->
811+ <fieldType name="ancestor_path" class="solr.TextField">
812+ <analyzer type="index">
813+ <tokenizer class="solr.KeywordTokenizerFactory" />
814+ </analyzer>
815+ <analyzer type="query">
816+ <tokenizer class="solr.PathHierarchyTokenizerFactory" delimiter="/" />
817+ </analyzer>
818+ </fieldType>
819+
820+ <!-- since fields of this type are by default not stored or indexed,
821+ any data added to them will be ignored outright. -->
822+ <fieldtype name="ignored" stored="false" indexed="false" multiValued="true" class="solr.StrField" />
823+
824+ <!-- This point type indexes the coordinates as separate fields (subFields)
825+ If subFieldType is defined, it references a type, and a dynamic field
826+ definition is created matching *___<typename>. Alternately, if
827+ subFieldSuffix is defined, that is used to create the subFields.
828+ Example: if subFieldType="double", then the coordinates would be
829+ indexed in fields myloc_0___double,myloc_1___double.
830+ Example: if subFieldSuffix="_d" then the coordinates would be indexed
831+ in fields myloc_0_d,myloc_1_d
832+ The subFields are an implementation detail of the fieldType, and end
833+ users normally should not need to know about them.
834+ -->
835+ <fieldType name="point" class="solr.PointType" dimension="2" subFieldSuffix="_d"/>
836+
837+ <!-- A specialized field for geospatial search. If indexed, this fieldType must not be multivalued. -->
838+ <fieldType name="location" class="solr.LatLonType" subFieldSuffix="_coordinate"/>
839+
840+ <!-- An alternative geospatial field type new to Solr 4. It supports multiValued and polygon shapes.
841+ For more information about this and other Spatial fields new to Solr 4, see:
842+ http://wiki.apache.org/solr/SolrAdaptersForLuceneSpatial4
843+ -->
844+ <fieldType name="location_rpt" class="solr.SpatialRecursivePrefixTreeFieldType"
845+ geo="true" distErrPct="0.025" maxDistErr="0.000009" units="degrees" />
846+
847+ <!-- Money/currency field type. See http://wiki.apache.org/solr/MoneyFieldType
848+ Parameters:
849+ defaultCurrency: Specifies the default currency if none specified. Defaults to "USD"
850+ precisionStep: Specifies the precisionStep for the TrieLong field used for the amount
851+ providerClass: Lets you plug in other exchange provider backend:
852+ solr.FileExchangeRateProvider is the default and takes one parameter:
853+ currencyConfig: name of an xml file holding exchange rates
854+ solr.OpenExchangeRatesOrgProvider uses rates from openexchangerates.org:
855+ ratesFileLocation: URL or path to rates JSON file (default latest.json on the web)
856+ refreshInterval: Number of minutes between each rates fetch (default: 1440, min: 60)
857+ -->
858+ <fieldType name="currency" class="solr.CurrencyField" precisionStep="8" defaultCurrency="USD" currencyConfig="currency.xml" />
859+
860+
861+
862+ <!-- some examples for different languages (generally ordered by ISO code) -->
863+
864+ <!-- Arabic -->
865+ <fieldType name="text_ar" class="solr.TextField" positionIncrementGap="100">
866+ <analyzer>
867+ <tokenizer class="solr.StandardTokenizerFactory"/>
868+ <!-- for any non-arabic -->
869+ <filter class="solr.LowerCaseFilterFactory"/>
870+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_ar.txt" />
871+ <!-- normalizes ﻯ to ﻱ, etc -->
872+ <filter class="solr.ArabicNormalizationFilterFactory"/>
873+ <filter class="solr.ArabicStemFilterFactory"/>
874+ </analyzer>
875+ </fieldType>
876+
877+ <!-- Bulgarian -->
878+ <fieldType name="text_bg" class="solr.TextField" positionIncrementGap="100">
879+ <analyzer>
880+ <tokenizer class="solr.StandardTokenizerFactory"/>
881+ <filter class="solr.LowerCaseFilterFactory"/>
882+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_bg.txt" />
883+ <filter class="solr.BulgarianStemFilterFactory"/>
884+ </analyzer>
885+ </fieldType>
886+
887+ <!-- Catalan -->
888+ <fieldType name="text_ca" class="solr.TextField" positionIncrementGap="100">
889+ <analyzer>
890+ <tokenizer class="solr.StandardTokenizerFactory"/>
891+ <!-- removes l', etc -->
892+ <filter class="solr.ElisionFilterFactory" ignoreCase="true" articles="lang/contractions_ca.txt"/>
893+ <filter class="solr.LowerCaseFilterFactory"/>
894+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_ca.txt" />
895+ <filter class="solr.SnowballPorterFilterFactory" language="Catalan"/>
896+ </analyzer>
897+ </fieldType>
898+
899+ <!-- CJK bigram (see text_ja for a Japanese configuration using morphological analysis) -->
900+ <fieldType name="text_cjk" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="true">
901+ <analyzer>
902+ <tokenizer class="solr.StandardTokenizerFactory"/>
903+ <!-- normalize width before bigram, as e.g. half-width dakuten combine -->
904+ <filter class="solr.CJKWidthFilterFactory"/>
905+ <!-- for any non-CJK -->
906+ <filter class="solr.LowerCaseFilterFactory"/>
907+ <filter class="solr.CJKBigramFilterFactory"/>
908+ </analyzer>
909+ </fieldType>
910+
911+ <!-- Czech -->
912+ <fieldType name="text_cz" class="solr.TextField" positionIncrementGap="100">
913+ <analyzer>
914+ <tokenizer class="solr.StandardTokenizerFactory"/>
915+ <filter class="solr.LowerCaseFilterFactory"/>
916+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_cz.txt" />
917+ <filter class="solr.CzechStemFilterFactory"/>
918+ </analyzer>
919+ </fieldType>
920+
921+ <!-- Danish -->
922+ <fieldType name="text_da" class="solr.TextField" positionIncrementGap="100">
923+ <analyzer>
924+ <tokenizer class="solr.StandardTokenizerFactory"/>
925+ <filter class="solr.LowerCaseFilterFactory"/>
926+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_da.txt" format="snowball" />
927+ <filter class="solr.SnowballPorterFilterFactory" language="Danish"/>
928+ </analyzer>
929+ </fieldType>
930+
931+ <!-- German -->
932+ <fieldType name="text_de" class="solr.TextField" positionIncrementGap="100">
933+ <analyzer>
934+ <tokenizer class="solr.StandardTokenizerFactory"/>
935+ <filter class="solr.LowerCaseFilterFactory"/>
936+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_de.txt" format="snowball" />
937+ <filter class="solr.GermanNormalizationFilterFactory"/>
938+ <filter class="solr.GermanLightStemFilterFactory"/>
939+ <!-- less aggressive: <filter class="solr.GermanMinimalStemFilterFactory"/> -->
940+ <!-- more aggressive: <filter class="solr.SnowballPorterFilterFactory" language="German2"/> -->
941+ </analyzer>
942+ </fieldType>
943+
944+ <!-- Greek -->
945+ <fieldType name="text_el" class="solr.TextField" positionIncrementGap="100">
946+ <analyzer>
947+ <tokenizer class="solr.StandardTokenizerFactory"/>
948+ <!-- greek specific lowercase for sigma -->
949+ <filter class="solr.GreekLowerCaseFilterFactory"/>
950+ <filter class="solr.StopFilterFactory" ignoreCase="false" words="lang/stopwords_el.txt" />
951+ <filter class="solr.GreekStemFilterFactory"/>
952+ </analyzer>
953+ </fieldType>
954+
955+ <!-- Spanish -->
956+ <fieldType name="text_es" class="solr.TextField" positionIncrementGap="100">
957+ <analyzer>
958+ <tokenizer class="solr.StandardTokenizerFactory"/>
959+ <filter class="solr.LowerCaseFilterFactory"/>
960+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_es.txt" format="snowball" />
961+ <filter class="solr.SpanishLightStemFilterFactory"/>
962+ <!-- more aggressive: <filter class="solr.SnowballPorterFilterFactory" language="Spanish"/> -->
963+ </analyzer>
964+ </fieldType>
965+
966+ <!-- Basque -->
967+ <fieldType name="text_eu" class="solr.TextField" positionIncrementGap="100">
968+ <analyzer>
969+ <tokenizer class="solr.StandardTokenizerFactory"/>
970+ <filter class="solr.LowerCaseFilterFactory"/>
971+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_eu.txt" />
972+ <filter class="solr.SnowballPorterFilterFactory" language="Basque"/>
973+ </analyzer>
974+ </fieldType>
975+
976+ <!-- Persian -->
977+ <fieldType name="text_fa" class="solr.TextField" positionIncrementGap="100">
978+ <analyzer>
979+ <!-- for ZWNJ -->
980+ <charFilter class="solr.PersianCharFilterFactory"/>
981+ <tokenizer class="solr.StandardTokenizerFactory"/>
982+ <filter class="solr.LowerCaseFilterFactory"/>
983+ <filter class="solr.ArabicNormalizationFilterFactory"/>
984+ <filter class="solr.PersianNormalizationFilterFactory"/>
985+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_fa.txt" />
986+ </analyzer>
987+ </fieldType>
988+
989+ <!-- Finnish -->
990+ <fieldType name="text_fi" class="solr.TextField" positionIncrementGap="100">
991+ <analyzer>
992+ <tokenizer class="solr.StandardTokenizerFactory"/>
993+ <filter class="solr.LowerCaseFilterFactory"/>
994+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_fi.txt" format="snowball" />
995+ <filter class="solr.SnowballPorterFilterFactory" language="Finnish"/>
996+ <!-- less aggressive: <filter class="solr.FinnishLightStemFilterFactory"/> -->
997+ </analyzer>
998+ </fieldType>
999+
1000+ <!-- French -->
1001+ <fieldType name="text_fr" class="solr.TextField" positionIncrementGap="100">
1002+ <analyzer>
1003+ <tokenizer class="solr.StandardTokenizerFactory"/>
1004+ <!-- removes l', etc -->
1005+ <filter class="solr.ElisionFilterFactory" ignoreCase="true" articles="lang/contractions_fr.txt"/>
1006+ <filter class="solr.LowerCaseFilterFactory"/>
1007+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_fr.txt" format="snowball" />
1008+ <filter class="solr.FrenchLightStemFilterFactory"/>
1009+ <!-- less aggressive: <filter class="solr.FrenchMinimalStemFilterFactory"/> -->
1010+ <!-- more aggressive: <filter class="solr.SnowballPorterFilterFactory" language="French"/> -->
1011+ </analyzer>
1012+ </fieldType>
1013+
1014+ <!-- Irish -->
1015+ <fieldType name="text_ga" class="solr.TextField" positionIncrementGap="100">
1016+ <analyzer>
1017+ <tokenizer class="solr.StandardTokenizerFactory"/>
1018+ <!-- removes d', etc -->
1019+ <filter class="solr.ElisionFilterFactory" ignoreCase="true" articles="lang/contractions_ga.txt"/>
1020+ <!-- removes n-, etc. position increments is intentionally false! -->
1021+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/hyphenations_ga.txt"/>
1022+ <filter class="solr.IrishLowerCaseFilterFactory"/>
1023+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_ga.txt"/>
1024+ <filter class="solr.SnowballPorterFilterFactory" language="Irish"/>
1025+ </analyzer>
1026+ </fieldType>
1027+
1028+ <!-- Galician -->
1029+ <fieldType name="text_gl" class="solr.TextField" positionIncrementGap="100">
1030+ <analyzer>
1031+ <tokenizer class="solr.StandardTokenizerFactory"/>
1032+ <filter class="solr.LowerCaseFilterFactory"/>
1033+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_gl.txt" />
1034+ <filter class="solr.GalicianStemFilterFactory"/>
1035+ <!-- less aggressive: <filter class="solr.GalicianMinimalStemFilterFactory"/> -->
1036+ </analyzer>
1037+ </fieldType>
1038+
1039+ <!-- Hindi -->
1040+ <fieldType name="text_hi" class="solr.TextField" positionIncrementGap="100">
1041+ <analyzer>
1042+ <tokenizer class="solr.StandardTokenizerFactory"/>
1043+ <filter class="solr.LowerCaseFilterFactory"/>
1044+ <!-- normalizes unicode representation -->
1045+ <filter class="solr.IndicNormalizationFilterFactory"/>
1046+ <!-- normalizes variation in spelling -->
1047+ <filter class="solr.HindiNormalizationFilterFactory"/>
1048+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_hi.txt" />
1049+ <filter class="solr.HindiStemFilterFactory"/>
1050+ </analyzer>
1051+ </fieldType>
1052+
1053+ <!-- Hungarian -->
1054+ <fieldType name="text_hu" class="solr.TextField" positionIncrementGap="100">
1055+ <analyzer>
1056+ <tokenizer class="solr.StandardTokenizerFactory"/>
1057+ <filter class="solr.LowerCaseFilterFactory"/>
1058+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_hu.txt" format="snowball" />
1059+ <filter class="solr.SnowballPorterFilterFactory" language="Hungarian"/>
1060+ <!-- less aggressive: <filter class="solr.HungarianLightStemFilterFactory"/> -->
1061+ </analyzer>
1062+ </fieldType>
1063+
1064+ <!-- Armenian -->
1065+ <fieldType name="text_hy" class="solr.TextField" positionIncrementGap="100">
1066+ <analyzer>
1067+ <tokenizer class="solr.StandardTokenizerFactory"/>
1068+ <filter class="solr.LowerCaseFilterFactory"/>
1069+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_hy.txt" />
1070+ <filter class="solr.SnowballPorterFilterFactory" language="Armenian"/>
1071+ </analyzer>
1072+ </fieldType>
1073+
1074+ <!-- Indonesian -->
1075+ <fieldType name="text_id" class="solr.TextField" positionIncrementGap="100">
1076+ <analyzer>
1077+ <tokenizer class="solr.StandardTokenizerFactory"/>
1078+ <filter class="solr.LowerCaseFilterFactory"/>
1079+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_id.txt" />
1080+ <!-- for a less aggressive approach (only inflectional suffixes), set stemDerivational to false -->
1081+ <filter class="solr.IndonesianStemFilterFactory" stemDerivational="true"/>
1082+ </analyzer>
1083+ </fieldType>
1084+
1085+ <!-- Italian -->
1086+ <fieldType name="text_it" class="solr.TextField" positionIncrementGap="100">
1087+ <analyzer>
1088+ <tokenizer class="solr.StandardTokenizerFactory"/>
1089+ <!-- removes l', etc -->
1090+ <filter class="solr.ElisionFilterFactory" ignoreCase="true" articles="lang/contractions_it.txt"/>
1091+ <filter class="solr.LowerCaseFilterFactory"/>
1092+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_it.txt" format="snowball" />
1093+ <filter class="solr.ItalianLightStemFilterFactory"/>
1094+ <!-- more aggressive: <filter class="solr.SnowballPorterFilterFactory" language="Italian"/> -->
1095+ </analyzer>
1096+ </fieldType>
1097+
1098+ <!-- Japanese using morphological analysis (see text_cjk for a configuration using bigramming)
1099+
1100+ NOTE: If you want to optimize search for precision, use default operator AND in your query
1101+ parser config with <solrQueryParser defaultOperator="AND"/> further down in this file. Use
1102+ OR if you would like to optimize for recall (default).
1103+ -->
1104+ <fieldType name="text_ja" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="true">
1105+ <analyzer>
1106+ <!-- Kuromoji Japanese morphological analyzer/tokenizer (JapaneseTokenizer)
1107+
1108+ Kuromoji has a search mode (default) that does segmentation useful for search. A heuristic
1109+ is used to segment compounds into its parts and the compound itself is kept as synonym.
1110+
1111+ Valid values for attribute mode are:
1112+ normal: regular segmentation
1113+ search: segmentation useful for search with synonyms compounds (default)
1114+ extended: same as search mode, but unigrams unknown words (experimental)
1115+
1116+ For some applications it might be good to use search mode for indexing and normal mode for
1117+ queries to reduce recall and prevent parts of compounds from being matched and highlighted.
1118+ Use <analyzer type="index"> and <analyzer type="query"> for this and mode normal in query.
1119+
1120+ Kuromoji also has a convenient user dictionary feature that allows overriding the statistical
1121+ model with your own entries for segmentation, part-of-speech tags and readings without a need
1122+ to specify weights. Notice that user dictionaries have not been subject to extensive testing.
1123+
1124+ User dictionary attributes are:
1125+ userDictionary: user dictionary filename
1126+ userDictionaryEncoding: user dictionary encoding (default is UTF-8)
1127+
1128+ See lang/userdict_ja.txt for a sample user dictionary file.
1129+
1130+ Punctuation characters are discarded by default. Use discardPunctuation="false" to keep them.
1131+
1132+ See http://wiki.apache.org/solr/JapaneseLanguageSupport for more on Japanese language support.
1133+ -->
1134+ <tokenizer class="solr.JapaneseTokenizerFactory" mode="search"/>
1135+ <!--<tokenizer class="solr.JapaneseTokenizerFactory" mode="search" userDictionary="lang/userdict_ja.txt"/>-->
1136+ <!-- Reduces inflected verbs and adjectives to their base/dictionary forms (辞書形) -->
1137+ <filter class="solr.JapaneseBaseFormFilterFactory"/>
1138+ <!-- Removes tokens with certain part-of-speech tags -->
1139+ <filter class="solr.JapanesePartOfSpeechStopFilterFactory" tags="lang/stoptags_ja.txt" />
1140+ <!-- Normalizes full-width romaji to half-width and half-width kana to full-width (Unicode NFKC subset) -->
1141+ <filter class="solr.CJKWidthFilterFactory"/>
1142+ <!-- Removes common tokens typically not useful for search, but have a negative effect on ranking -->
1143+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_ja.txt" />
1144+ <!-- Normalizes common katakana spelling variations by removing any last long sound character (U+30FC) -->
1145+ <filter class="solr.JapaneseKatakanaStemFilterFactory" minimumLength="4"/>
1146+ <!-- Lower-cases romaji characters -->
1147+ <filter class="solr.LowerCaseFilterFactory"/>
1148+ </analyzer>
1149+ </fieldType>
1150+
1151+ <!-- Latvian -->
1152+ <fieldType name="text_lv" class="solr.TextField" positionIncrementGap="100">
1153+ <analyzer>
1154+ <tokenizer class="solr.StandardTokenizerFactory"/>
1155+ <filter class="solr.LowerCaseFilterFactory"/>
1156+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_lv.txt" />
1157+ <filter class="solr.LatvianStemFilterFactory"/>
1158+ </analyzer>
1159+ </fieldType>
1160+
1161+ <!-- Dutch -->
1162+ <fieldType name="text_nl" class="solr.TextField" positionIncrementGap="100">
1163+ <analyzer>
1164+ <tokenizer class="solr.StandardTokenizerFactory"/>
1165+ <filter class="solr.LowerCaseFilterFactory"/>
1166+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_nl.txt" format="snowball" />
1167+ <filter class="solr.StemmerOverrideFilterFactory" dictionary="lang/stemdict_nl.txt" ignoreCase="false"/>
1168+ <filter class="solr.SnowballPorterFilterFactory" language="Dutch"/>
1169+ </analyzer>
1170+ </fieldType>
1171+
1172+ <!-- Norwegian -->
1173+ <fieldType name="text_no" class="solr.TextField" positionIncrementGap="100">
1174+ <analyzer>
1175+ <tokenizer class="solr.StandardTokenizerFactory"/>
1176+ <filter class="solr.LowerCaseFilterFactory"/>
1177+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_no.txt" format="snowball" />
1178+ <filter class="solr.SnowballPorterFilterFactory" language="Norwegian"/>
1179+ <!-- less aggressive: <filter class="solr.NorwegianLightStemFilterFactory" variant="nb"/> -->
1180+ <!-- singular/plural: <filter class="solr.NorwegianMinimalStemFilterFactory" variant="nb"/> -->
1181+ <!-- The "light" and "minimal" stemmers support variants: nb=Bokmål, nn=Nynorsk, no=Both -->
1182+ </analyzer>
1183+ </fieldType>
1184+
1185+ <!-- Portuguese -->
1186+ <fieldType name="text_pt" class="solr.TextField" positionIncrementGap="100">
1187+ <analyzer>
1188+ <tokenizer class="solr.StandardTokenizerFactory"/>
1189+ <filter class="solr.LowerCaseFilterFactory"/>
1190+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_pt.txt" format="snowball" />
1191+ <filter class="solr.PortugueseLightStemFilterFactory"/>
1192+ <!-- less aggressive: <filter class="solr.PortugueseMinimalStemFilterFactory"/> -->
1193+ <!-- more aggressive: <filter class="solr.SnowballPorterFilterFactory" language="Portuguese"/> -->
1194+ <!-- most aggressive: <filter class="solr.PortugueseStemFilterFactory"/> -->
1195+ </analyzer>
1196+ </fieldType>
1197+
1198+ <!-- Romanian -->
1199+ <fieldType name="text_ro" class="solr.TextField" positionIncrementGap="100">
1200+ <analyzer>
1201+ <tokenizer class="solr.StandardTokenizerFactory"/>
1202+ <filter class="solr.LowerCaseFilterFactory"/>
1203+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_ro.txt" />
1204+ <filter class="solr.SnowballPorterFilterFactory" language="Romanian"/>
1205+ </analyzer>
1206+ </fieldType>
1207+
1208+ <!-- Russian -->
1209+ <fieldType name="text_ru" class="solr.TextField" positionIncrementGap="100">
1210+ <analyzer>
1211+ <tokenizer class="solr.StandardTokenizerFactory"/>
1212+ <filter class="solr.LowerCaseFilterFactory"/>
1213+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_ru.txt" format="snowball" />
1214+ <filter class="solr.SnowballPorterFilterFactory" language="Russian"/>
1215+ <!-- less aggressive: <filter class="solr.RussianLightStemFilterFactory"/> -->
1216+ </analyzer>
1217+ </fieldType>
1218+
1219+ <!-- Swedish -->
1220+ <fieldType name="text_sv" class="solr.TextField" positionIncrementGap="100">
1221+ <analyzer>
1222+ <tokenizer class="solr.StandardTokenizerFactory"/>
1223+ <filter class="solr.LowerCaseFilterFactory"/>
1224+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_sv.txt" format="snowball" />
1225+ <filter class="solr.SnowballPorterFilterFactory" language="Swedish"/>
1226+ <!-- less aggressive: <filter class="solr.SwedishLightStemFilterFactory"/> -->
1227+ </analyzer>
1228+ </fieldType>
1229+
1230+ <!-- Thai -->
1231+ <fieldType name="text_th" class="solr.TextField" positionIncrementGap="100">
1232+ <analyzer>
1233+ <tokenizer class="solr.StandardTokenizerFactory"/>
1234+ <filter class="solr.LowerCaseFilterFactory"/>
1235+ <filter class="solr.ThaiWordFilterFactory"/>
1236+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_th.txt" />
1237+ </analyzer>
1238+ </fieldType>
1239+
1240+ <!-- Turkish -->
1241+ <fieldType name="text_tr" class="solr.TextField" positionIncrementGap="100">
1242+ <analyzer>
1243+ <tokenizer class="solr.StandardTokenizerFactory"/>
1244+ <filter class="solr.TurkishLowerCaseFilterFactory"/>
1245+ <filter class="solr.StopFilterFactory" ignoreCase="false" words="lang/stopwords_tr.txt" />
1246+ <filter class="solr.SnowballPorterFilterFactory" language="Turkish"/>
1247+ </analyzer>
1248+ </fieldType>
1249+
1250+ <!-- gosen -->
1251+ <!-- configuration for japanese text, using a morphological analyzer
1252+ Most possibilities for customization are specified here in the schema.
1253+
1254+ Note: you can set the default query operator to be OR, AND, or PHRASE:
1255+ OR: Use these defaults (autoGeneratePhraseQueries="false", <solrQueryParser defaultOperator="OR"/>
1256+ In this case Solr works like it does with the English language. The default query is OR,
1257+ but documents that contain more of the query terms get a special boost. You can probably
1258+ use a less aggressive stopwords/stoptags in this case, and its probably a good idea to use
1259+ enablePositionIncrements=true, so that if a user puts a query in quotes, they get a much more
1260+ exact phrase query.
1261+ AND: Set autoGeneratePhraseQueries=false, but set <solrQueryParser defaultOperator="AND"/> in
1262+ your schema.xml. Note if you do this, you should use a more aggressive stopwords/stoptags
1263+ list (at least at query-time), otherwise a document might not match simply because it does
1264+ not contain a prefix or particle. As in the above case, its probably a good idea to use
1265+ enablePositionIncrements=true for explicit phrase queries from the user.
1266+ PHRASE: Set autoGeneratePhraseQueries=true. If you do this, you should probably use both a very
1267+ aggressive stopwords list, and you should probably also set enablePositionIncrements=false
1268+ everywhere. Otherwise, even documents that contain the query's phrase in exact order will
1269+ not match because of slightly different grammatical structure.
1270+ -->
1271+ <fieldType name="text_gosen" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="true">
1272+ <analyzer>
1273+ <!-- map characters before the tokenizer:
1274+ Optionally, instead of the GosenWidthFactory, you can choose to do the width
1275+ mappings before the text is sent to the tokenizer.
1276+ <charFilter class="solr.MappingCharFilterFactory" mapping="mapping-japanese.txt"/>
1277+ -->
1278+
1279+ <!-- morphological tokenizer: sets the SURFACE form as the token, but also sets these attributes:
1280+ BasicFormAttribute, ConjugationAttribute, PartOfSpeechAttribute, PronunciationsAttribute,
1281+ ReadingsAttribute, and SentenceStartAttribute.
1282+ Option setting
1283+ compositePOS : merge multiple similar tokens by a part-of-speech based configrations
1284+ dictionaryDir : specified a dictionary directory. you can use multiple dictionary for each tokenizer.
1285+ -->
1286+ <tokenizer class="solr.GosenTokenizerFactory" compositePOS="compositePOS.txt" dictionaryDir="dictionary/naist-chasen"/>
1287+
1288+ <!-- normalizes CJK width differences:
1289+ 1. Folds fullwidth ASCII variants into the equivalent basic latin
1290+ 2. Folds halfwidth Katakana variants into the equivalent kana
1291+
1292+ Note: alternatively you can use a MappingCharFilter before the tokenizer for this, but please note
1293+ that mapping characters can change how Sen tokenizes text.
1294+ -->
1295+ <filter class="solr.GosenWidthFilterFactory"/>
1296+
1297+ <!-- the punctuation filter removes all-punctuation tokens base on Unicode properties.
1298+ punctuation tokens are tagged as "unknown", and its better to do this than to remove
1299+ tokens with an unknown pos (as they might be valuable!). Because this punctuation
1300+ usually signifies a phrase or sentence boundary, enablePositionIncrements can be
1301+ used to prevent phrase queries from matching across natural phrase/sentence boundaries -->
1302+ <filter class="solr.GosenPunctuationFilterFactory" enablePositionIncrements="false"/>
1303+
1304+ <!-- this is a part-of-speech based stopfilter, it removes any tokens that have a certain
1305+ of speech. you can set enablePositionIncrements for tighter phrase queries -->
1306+ <filter class="solr.GosenPartOfSpeechStopFilterFactory" tags="stoptags_ja.txt" enablePositionIncrements="false"/>
1307+
1308+ <!-- a standard stopfilter, to specify specific stopwords. -->
1309+ <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords_ja.txt" enablePositionIncrements="false"/>
1310+
1311+ <!-- alternatively, instead of using a part-of-speech based stopfilter, you can use a
1312+ part-of-speech based keepfilter: specifying only the parts of speech you wish to index.
1313+ anything else will be removed. HOWEVER: this could be a little dangerous, because if
1314+ we upgrade ipadic they might add some new tags (the tags are fairly specific), and suddenly
1315+ things that you were indexing before are no longer being indexed. Its recommended to
1316+ use the part-of-speech based stopfilter above if at all possible, for safety.
1317+ <filter class="solr.GosenPartOfSpeechKeepFilterFactory" tags="keeptags_ja.txt" enablePositionIncrements="true"/>
1318+ -->
1319+
1320+ <!-- before any stemming/lemmatization, you can protect words from being modified by specifying
1321+ a protwords.txt.
1322+ <filter class="solr.KeywordMarkerFilterFactory" protected="protwords_ja.txt" ignoreCase="false"/>
1323+
1324+ or you can also supply a custom stem dictionary for inflected forms (tab separated). No
1325+ further stemming/lemmatization will modify this.
1326+ <filter class="solr.StemmerOverrideFilterFactory" dictionary="dictionary.txt" ignoreCase="false"/>
1327+ -->
1328+
1329+ <!-- the basic form filter converts inflected verbs and adjectives to their dictionary citation form. -->
1330+ <filter class="solr.GosenBasicFormFilterFactory"/>
1331+
1332+ <!-- this filter heuristically normalizes katakana forms with a final prolonged sound mark -->
1333+ <filter class="solr.GosenKatakanaStemFilterFactory"/>
1334+
1335+ <!-- you might want to lowercase for any english text content you have -->
1336+ <filter class="solr.LowerCaseFilterFactory"/>
1337+ </analyzer>
1338+ </fieldType>
1339+
1340+ <fieldType name="text" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="true">
1341+ <analyzer>
1342+ <tokenizer class="solr.StandardTokenizerFactory"/>
1343+ <!-- normalize width before bigram, as e.g. half-width dakuten combine -->
1344+ <filter class="solr.CJKWidthFilterFactory"/>
1345+ <!-- for any non-CJK -->
1346+ <filter class="solr.LowerCaseFilterFactory"/>
1347+ <filter class="solr.CJKBigramFilterFactory"/>
1348+ </analyzer>
1349+ </fieldType>
1350+
1351+ <fieldType name="url" class="solr.TextField" positionIncrementGap="100">
1352+ <analyzer>
1353+ <tokenizer class="solr.StandardTokenizerFactory"/>
1354+ <filter class="solr.LowerCaseFilterFactory"/>
1355+ <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1"/>
1356+ <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
1357+ </analyzer>
1358+ </fieldType>
1359+
1360+ <fieldType name="text_suggest" class="solr.TextField" positionIncrementGap="100">
1361+ <analyzer>
1362+ <tokenizer class="jp.sf.fess.solr.plugin.analysis.SuggestTextTokenizerFactory" maxLength="10000" userDictionary="lang/userdict_suggest_ja.txt" userDictionaryEncoding="UTF-8" includePartOfSpeech="start:名詞,start:接頭詞,start:形容詞,middle:名詞,middle:接頭詞,middle:形容詞" excludePartOfSpeech="start:副詞可能" includeCharTerm="middle:な" preConverters="[{&quot;class&quot;:&quot;jp.sf.fess.suggest.converter.ICUConverter&quot;, &quot;args&quot;:[&quot;Fullwidth-Halfwidth&quot;]}, {&quot;class&quot;:&quot;jp.sf.fess.suggest.converter.ICUConverter&quot;, &quot;args&quot;:[&quot;Any-Lower&quot;]}, {&quot;class&quot;:&quot;jp.sf.fess.suggest.converter.NormalizeConverter&quot;}]" converters="[{&quot;class&quot;:&quot;jp.sf.fess.suggest.converter.SymbolConverter&quot;, &quot;method&quot;:[{&quot;name&quot;:&quot;addSymbol&quot;, &quot;args&quot;:[[&quot;0&quot;, &quot;1&quot;, &quot;2&quot;, &quot;3&quot;, &quot;4&quot;, &quot;5&quot;, &quot;6&quot;, &quot;7&quot;, &quot;8&quot;, &quot;9&quot;, &quot;0&quot;, &quot;1&quot;, &quot;2&quot;, &quot;3&quot;, &quot;4&quot;, &quot;5&quot;, &quot;6&quot;, &quot;7&quot;, &quot;8&quot;, &quot;9&quot;, &quot; &quot;, &quot; &quot;, &quot;【&quot;, &quot;】&quot;, &quot;・&quot;, &quot;(&quot;, &quot;)&quot;, &quot;(&quot;, &quot;)&quot;, &quot;%&quot;, &quot;%&quot;, &quot;~&quot;, &quot;+&quot;, &quot;#&quot;, &quot;#&quot;, &quot;\&quot;&quot;, &quot;&#148;&quot;, &quot;&#039;&quot;, &quot;\\&quot;, &quot;¥&quot;, &quot;[&quot;, &quot;]&quot;, &quot;「&quot;, &quot;」&quot;, &quot;『&quot;, &quot;』&quot;, &quot;&lt;&quot;, &quot;&gt;&quot;, &quot;<&quot;, &quot;>&quot;, &quot;/&quot;, &quot;/&quot;, &quot;{&quot;, &quot;}&quot;, &quot;&amp;&quot;, &quot;&&quot;, &quot;Ⅰ&quot;, &quot;Ⅱ&quot;, &quot;Ⅲ&quot;, &quot;Ⅳ&quot;, &quot;Ⅴ&quot;, &quot;Ⅵ&quot;, &quot;Ⅶ&quot;, &quot;Ⅷ&quot;, &quot;Ⅸ&quot;, &quot;Ⅹ&quot;, &quot;ⅰ&quot;, &quot;ⅱ&quot;, &quot;ⅲ&quot;, &quot;ⅳ&quot;, &quot;ⅴ&quot;, &quot;ⅵ&quot;, &quot;ⅶ&quot;, &quot;ⅷ&quot;, &quot;ⅸ&quot;, &quot;ⅹ&quot;, &quot;-&quot;, &quot;-&quot;, &quot;.&quot;]]}]}]"/>
1363+ </analyzer>
1364+ </fieldType>
1365+
1366+ <fieldType name="string_suggest" class="solr.TextField" positionIncrementGap="100">
1367+ <analyzer>
1368+ <tokenizer class="jp.sf.fess.solr.plugin.analysis.SuggestStringTokenizerFactory" userDictionary="lang/userdict_suggest_ja.txt" userDictionaryEncoding="UTF-8" preConverters="[{&quot;class&quot;:&quot;jp.sf.fess.suggest.converter.ICUConverter&quot;, &quot;args&quot;:[&quot;Fullwidth-Halfwidth&quot;]}, {&quot;class&quot;:&quot;jp.sf.fess.suggest.converter.ICUConverter&quot;, &quot;args&quot;:[&quot;Any-Lower&quot;]}, {&quot;class&quot;:&quot;jp.sf.fess.suggest.converter.NormalizeConverter&quot;}]" converters="[{&quot;class&quot;:&quot;jp.sf.fess.suggest.converter.SymbolConverter&quot;, &quot;method&quot;:[{&quot;name&quot;:&quot;addSymbol&quot;, &quot;args&quot;:[[&quot;0&quot;, &quot;1&quot;, &quot;2&quot;, &quot;3&quot;, &quot;4&quot;, &quot;5&quot;, &quot;6&quot;, &quot;7&quot;, &quot;8&quot;, &quot;9&quot;, &quot;0&quot;, &quot;1&quot;, &quot;2&quot;, &quot;3&quot;, &quot;4&quot;, &quot;5&quot;, &quot;6&quot;, &quot;7&quot;, &quot;8&quot;, &quot;9&quot;, &quot; &quot;, &quot; &quot;, &quot;【&quot;, &quot;】&quot;, &quot;・&quot;, &quot;(&quot;, &quot;)&quot;, &quot;(&quot;, &quot;)&quot;, &quot;%&quot;, &quot;%&quot;, &quot;~&quot;, &quot;+&quot;, &quot;#&quot;, &quot;#&quot;, &quot;\&quot;&quot;, &quot;&#148;&quot;, &quot;&#039;&quot;, &quot;\\&quot;, &quot;¥&quot;, &quot;[&quot;, &quot;]&quot;, &quot;「&quot;, &quot;」&quot;, &quot;『&quot;, &quot;』&quot;, &quot;&lt;&quot;, &quot;&gt;&quot;, &quot;<&quot;, &quot;>&quot;, &quot;/&quot;, &quot;/&quot;, &quot;{&quot;, &quot;}&quot;, &quot;&amp;&quot;, &quot;&&quot;, &quot;Ⅰ&quot;, &quot;Ⅱ&quot;, &quot;Ⅲ&quot;, &quot;Ⅳ&quot;, &quot;Ⅴ&quot;, &quot;Ⅵ&quot;, &quot;Ⅶ&quot;, &quot;Ⅷ&quot;, &quot;Ⅸ&quot;, &quot;Ⅹ&quot;, &quot;ⅰ&quot;, &quot;ⅱ&quot;, &quot;ⅲ&quot;, &quot;ⅳ&quot;, &quot;ⅴ&quot;, &quot;ⅵ&quot;, &quot;ⅶ&quot;, &quot;ⅷ&quot;, &quot;ⅸ&quot;, &quot;ⅹ&quot;, &quot;-&quot;, &quot;-&quot;, &quot;.&quot; ]]}]}]"/>
1369+ </analyzer>
1370+ </fieldType>
1371+
1372+ <fieldType name="domain_name" class="solr.TextField">
1373+ <analyzer type="index">
1374+ <tokenizer class="solr.PathHierarchyTokenizerFactory" delimiter="." reverse="true"/>
1375+ </analyzer>
1376+ <analyzer type="query">
1377+ <tokenizer class="solr.KeywordTokenizerFactory" />
1378+ </analyzer>
1379+ </fieldType>
1380+
1381+ </types>
1382+
1383+ <!-- Similarity is the scoring routine for each document vs. a query.
1384+ A custom Similarity or SimilarityFactory may be specified here, but
1385+ the default is fine for most applications.
1386+ For more info: http://wiki.apache.org/solr/SchemaXml#Similarity
1387+ -->
1388+ <!--
1389+ <similarity class="com.example.solr.CustomSimilarityFactory">
1390+ <str name="paramkey">param value</str>
1391+ </similarity>
1392+ -->
1393+
1394+</schema>
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
--- fess-server/tags/fess-server-8.2.0/src/tomcat/solr/core1/conf/compositePOS.txt (revision 0)
+++ fess-server/tags/fess-server-8.2.0/src/tomcat/solr/core1/conf/compositePOS.txt (revision 1802)
@@ -0,0 +1,2 @@
1+名詞-数
2+未知語 記号-アルファベット
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
--- fess-server/tags/fess-server-8.2.0/src/tomcat/solr/core1/conf/mapping_ja.txt (revision 0)
+++ fess-server/tags/fess-server-8.2.0/src/tomcat/solr/core1/conf/mapping_ja.txt (revision 1802)
@@ -0,0 +1,179 @@
1+# Half-width Katakana => Full-width Katakana
2+"ア" => "ア"
3+"イ" => "イ"
4+"ウ" => "ウ"
5+"エ" => "エ"
6+"オ" => "オ"
7+"カ" => "カ"
8+"キ" => "キ"
9+"ク" => "ク"
10+"ケ" => "ケ"
11+"コ" => "コ"
12+"サ" => "サ"
13+"シ" => "シ"
14+"ス" => "ス"
15+"セ" => "セ"
16+"ソ" => "ソ"
17+"タ" => "タ"
18+"チ" => "チ"
19+"ツ" => "ツ"
20+"テ" => "テ"
21+"ト" => "ト"
22+"ナ" => "ナ"
23+"ニ" => "ニ"
24+"ヌ" => "ヌ"
25+"ネ" => "ネ"
26+"ノ" => "ノ"
27+"ハ" => "ハ"
28+"ヒ" => "ヒ"
29+"フ" => "フ"
30+"ヘ" => "ヘ"
31+"ホ" => "ホ"
32+"マ" => "マ"
33+"ミ" => "ミ"
34+"ム" => "ム"
35+"メ" => "メ"
36+"モ" => "モ"
37+"ヤ" => "ヤ"
38+"ユ" => "ユ"
39+"ヨ" => "ヨ"
40+"ラ" => "ラ"
41+"リ" => "リ"
42+"ル" => "ル"
43+"レ" => "レ"
44+"ロ" => "ロ"
45+"ワ" => "ワ"
46+"ヲ" => "ヲ"
47+"ン" => "ン"
48+"ッ" => "ッ"
49+"ァ" => "ァ"
50+"ィ" => "ィ"
51+"ゥ" => "ゥ"
52+"ェ" => "ェ"
53+"ォ" => "ォ"
54+"ャ" => "ャ"
55+"ュ" => "ュ"
56+"ョ" => "ョ"
57+"ガ" => "ガ"
58+"ギ" => "ギ"
59+"グ" => "グ"
60+"ゲ" => "ゲ"
61+"ゴ" => "ゴ"
62+"ザ" => "ザ"
63+"ジ" => "ジ"
64+"ズ" => "ズ"
65+"ゼ" => "ゼ"
66+"ゾ" => "ゾ"
67+"ダ" => "ダ"
68+"ヂ" => "ヂ"
69+"ヅ" => "ヅ"
70+"デ" => "デ"
71+"ド" => "ド"
72+"バ" => "バ"
73+"ビ" => "ビ"
74+"ブ" => "ブ"
75+"ベ" => "ベ"
76+"ボ" => "ボ"
77+"パ" => "パ"
78+"ピ" => "ピ"
79+"プ" => "プ"
80+"ペ" => "ペ"
81+"ポ" => "ポ"
82+
83+# Full-width alpha-numeric => Half-width alpha-numeric
84+"0" => "0"
85+"1" => "1"
86+"2" => "2"
87+"3" => "3"
88+"4" => "4"
89+"5" => "5"
90+"6" => "6"
91+"7" => "7"
92+"8" => "8"
93+"9" => "9"
94+
95+"A" => "A"
96+"B" => "B"
97+"C" => "C"
98+"D" => "D"
99+"E" => "E"
100+"F" => "F"
101+"G" => "G"
102+"H" => "H"
103+"I" => "I"
104+"J" => "J"
105+"K" => "K"
106+"L" => "L"
107+"M" => "M"
108+"N" => "N"
109+"O" => "O"
110+"P" => "P"
111+"Q" => "Q"
112+"R" => "R"
113+"S" => "S"
114+"T" => "T"
115+"U" => "U"
116+"V" => "V"
117+"W" => "W"
118+"X" => "X"
119+"Y" => "Y"
120+"Z" => "Z"
121+
122+"a" => "a"
123+"b" => "b"
124+"c" => "c"
125+"d" => "d"
126+"e" => "e"
127+"f" => "f"
128+"g" => "g"
129+"h" => "h"
130+"i" => "i"
131+"j" => "j"
132+"k" => "k"
133+"l" => "l"
134+"m" => "m"
135+"n" => "n"
136+"o" => "o"
137+"p" => "p"
138+"q" => "q"
139+"r" => "r"
140+"s" => "s"
141+"t" => "t"
142+"u" => "u"
143+"v" => "v"
144+"w" => "w"
145+"x" => "x"
146+"y" => "y"
147+"z" => "z"
148+
149+# !"#$%&'()=|-^\@[`{;:]+*}/_<>?
150+"!" => "!"
151+"”" => "\""
152+"#" => "#"
153+"$" => "$"
154+"%" => "%"
155+"&" => "&"
156+"’" => "'"
157+"(" => "("
158+")" => ")"
159+"=" => "="
160+"|" => "|"
161+"-" => "-"
162+"^" => "^"
163+"¥" => "\\"
164+"@" => "@"
165+"[" => "["
166+"`" => "`"
167+"{" => "{"
168+";" => ";"
169+":" => ":"
170+"]" => "]"
171+"+" => "+"
172+"*" => "*"
173+"}" => "}"
174+"/" => "/"
175+"_" => "_"
176+"<" => "<"
177+">" => ">"
178+"?" => "?"
179+"‘" => "`"
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
--- fess-server/tags/fess-server-8.2.0/src/tomcat/solr/core1/conf/solrconfig.xml (revision 0)
+++ fess-server/tags/fess-server-8.2.0/src/tomcat/solr/core1/conf/solrconfig.xml (revision 1802)
@@ -0,0 +1,1936 @@
1+<?xml version="1.0" encoding="UTF-8" ?>
2+<!--
3+ Licensed to the Apache Software Foundation (ASF) under one or more
4+ contributor license agreements. See the NOTICE file distributed with
5+ this work for additional information regarding copyright ownership.
6+ The ASF licenses this file to You under the Apache License, Version 2.0
7+ (the "License"); you may not use this file except in compliance with
8+ the License. You may obtain a copy of the License at
9+
10+ http://www.apache.org/licenses/LICENSE-2.0
11+
12+ Unless required by applicable law or agreed to in writing, software
13+ distributed under the License is distributed on an "AS IS" BASIS,
14+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15+ See the License for the specific language governing permissions and
16+ limitations under the License.
17+-->
18+
19+<!--
20+ For more details about configurations options that may appear in
21+ this file, see http://wiki.apache.org/solr/SolrConfigXml.
22+-->
23+<config>
24+ <!-- In all configuration below, a prefix of "solr." for class names
25+ is an alias that causes solr to search appropriate packages,
26+ including org.apache.solr.(search|update|request|core|analysis)
27+
28+ You may also specify a fully qualified Java classname if you
29+ have your own custom plugins.
30+ -->
31+
32+ <!-- Controls what version of Lucene various components of Solr
33+ adhere to. Generally, you want to use the latest version to
34+ get all bug fixes and improvements. It is highly recommended
35+ that you fully re-index after changing this setting as it can
36+ affect both how text is indexed and queried.
37+ -->
38+ <luceneMatchVersion>4.4</luceneMatchVersion>
39+
40+ <!-- <lib/> directives can be used to instruct Solr to load an Jars
41+ identified and use them to resolve any "plugins" specified in
42+ your solrconfig.xml or schema.xml (ie: Analyzers, Request
43+ Handlers, etc...).
44+
45+ All directories and paths are resolved relative to the
46+ instanceDir.
47+
48+ Please note that <lib/> directives are processed in the order
49+ that they appear in your solrconfig.xml file, and are "stacked"
50+ on top of each other when building a ClassLoader - so if you have
51+ plugin jars with dependencies on other jars, the "lower level"
52+ dependency jars should be loaded first.
53+
54+ If a "./lib" directory exists in your instanceDir, all files
55+ found in it are included as if you had used the following
56+ syntax...
57+
58+ <lib dir="./lib" />
59+ -->
60+
61+ <!-- A 'dir' option by itself adds any files found in the directory
62+ to the classpath, this is useful for including all jars in a
63+ directory.
64+
65+ When a 'regex' is specified in addition to a 'dir', only the
66+ files in that directory which completely match the regex
67+ (anchored on both ends) will be included.
68+
69+ If a 'dir' option (with or without a regex) is used and nothing
70+ is found that matches, a warning will be logged.
71+
72+ The examples below can be used to load some solr-contribs along
73+ with their external dependencies.
74+ -->
75+ <lib dir="../contrib/extraction/lib" regex=".*\.jar" />
76+ <lib dir="../dist/" regex="solr-cell-\d.*\.jar" />
77+
78+ <lib dir="../contrib/clustering/lib/" regex=".*\.jar" />
79+ <lib dir="../dist/" regex="solr-clustering-\d.*\.jar" />
80+
81+ <lib dir="../contrib/langid/lib/" regex=".*\.jar" />
82+ <lib dir="../dist/" regex="solr-langid-\d.*\.jar" />
83+
84+ <lib dir="../contrib/velocity/lib" regex=".*\.jar" />
85+ <lib dir="../dist/" regex="solr-velocity-\d.*\.jar" />
86+
87+ <!-- an exact 'path' can be used instead of a 'dir' to specify a
88+ specific jar file. This will cause a serious error to be logged
89+ if it can't be loaded.
90+ -->
91+ <!--
92+ <lib path="../a-jar-that-does-not-exist.jar" />
93+ -->
94+
95+ <!-- Data Directory
96+
97+ Used to specify an alternate directory to hold all index data
98+ other than the default ./data under the Solr home. If
99+ replication is in use, this should match the replication
100+ configuration.
101+ -->
102+ <dataDir>${solr.solr.home}/${solr.core.name}/data</dataDir>
103+
104+
105+ <!-- The DirectoryFactory to use for indexes.
106+
107+ solr.StandardDirectoryFactory is filesystem
108+ based and tries to pick the best implementation for the current
109+ JVM and platform. solr.NRTCachingDirectoryFactory, the default,
110+ wraps solr.StandardDirectoryFactory and caches small files in memory
111+ for better NRT performance.
112+
113+ One can force a particular implementation via solr.MMapDirectoryFactory,
114+ solr.NIOFSDirectoryFactory, or solr.SimpleFSDirectoryFactory.
115+
116+ solr.RAMDirectoryFactory is memory based, not
117+ persistent, and doesn't work with replication.
118+ -->
119+ <directoryFactory name="DirectoryFactory"
120+ class="${solr.directoryFactory:solr.NRTCachingDirectoryFactory}"/>
121+
122+ <!-- The CodecFactory for defining the format of the inverted index.
123+ The default implementation is SchemaCodecFactory, which is the official Lucene
124+ index format, but hooks into the schema to provide per-field customization of
125+ the postings lists and per-document values in the fieldType element
126+ (postingsFormat/docValuesFormat). Note that most of the alternative implementations
127+ are experimental, so if you choose to customize the index format, its a good
128+ idea to convert back to the official format e.g. via IndexWriter.addIndexes(IndexReader)
129+ before upgrading to a newer version to avoid unnecessary reindexing.
130+ -->
131+ <codecFactory class="solr.SchemaCodecFactory"/>
132+
133+ <!-- To enable dynamic schema REST APIs, use the following for <schemaFactory>:
134+
135+ <schemaFactory class="ManagedIndexSchemaFactory">
136+ <bool name="mutable">true</bool>
137+ <str name="managedSchemaResourceName">managed-schema</str>
138+ </schemaFactory>
139+
140+ When ManagedIndexSchemaFactory is specified, Solr will load the schema from
141+ he resource named in 'managedSchemaResourceName', rather than from schema.xml.
142+ Note that the managed schema resource CANNOT be named schema.xml. If the managed
143+ schema does not exist, Solr will create it after reading schema.xml, then rename
144+ 'schema.xml' to 'schema.xml.bak'.
145+
146+ Do NOT hand edit the managed schema - external modifications will be ignored and
147+ overwritten as a result of schema modification REST API calls.
148+
149+ When ManagedIndexSchemaFactory is specified with mutable = true, schema
150+ modification REST API calls will be allowed; otherwise, error responses will be
151+ sent back for these requests.
152+ -->
153+ <schemaFactory class="ClassicIndexSchemaFactory"/>
154+
155+ <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
156+ Index Config - These settings control low-level behavior of indexing
157+ Most example settings here show the default value, but are commented
158+ out, to more easily see where customizations have been made.
159+
160+ Note: This replaces <indexDefaults> and <mainIndex> from older versions
161+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
162+ <indexConfig>
163+ <!-- maxFieldLength was removed in 4.0. To get similar behavior, include a
164+ LimitTokenCountFilterFactory in your fieldType definition. -->
165+ <filter class="solr.LimitTokenCountFilterFactory" maxTokenCount="50000"/>
166+ <!-- Maximum time to wait for a write lock (ms) for an IndexWriter. Default: 1000 -->
167+ <!-- <writeLockTimeout>1000</writeLockTimeout> -->
168+
169+ <!-- The maximum number of simultaneous threads that may be
170+ indexing documents at once in IndexWriter; if more than this
171+ many threads arrive they will wait for others to finish.
172+ Default in Solr/Lucene is 8. -->
173+ <!-- <maxIndexingThreads>8</maxIndexingThreads> -->
174+
175+ <!-- Expert: Enabling compound file will use less files for the index,
176+ using fewer file descriptors on the expense of performance decrease.
177+ Default in Lucene is "true". Default in Solr is "false" (since 3.6) -->
178+ <!-- <useCompoundFile>false</useCompoundFile> -->
179+
180+ <!-- ramBufferSizeMB sets the amount of RAM that may be used by Lucene
181+ indexing for buffering added documents and deletions before they are
182+ flushed to the Directory.
183+ maxBufferedDocs sets a limit on the number of documents buffered
184+ before flushing.
185+ If both ramBufferSizeMB and maxBufferedDocs is set, then
186+ Lucene will flush based on whichever limit is hit first.
187+ The default is 100 MB. -->
188+ <!-- <ramBufferSizeMB>100</ramBufferSizeMB> -->
189+ <!-- <maxBufferedDocs>1000</maxBufferedDocs> -->
190+
191+ <!-- Expert: Merge Policy
192+ The Merge Policy in Lucene controls how merging of segments is done.
193+ The default since Solr/Lucene 3.3 is TieredMergePolicy.
194+ The default since Lucene 2.3 was the LogByteSizeMergePolicy,
195+ Even older versions of Lucene used LogDocMergePolicy.
196+ -->
197+ <!--
198+ <mergePolicy class="org.apache.lucene.index.TieredMergePolicy">
199+ <int name="maxMergeAtOnce">10</int>
200+ <int name="segmentsPerTier">10</int>
201+ </mergePolicy>
202+ -->
203+
204+ <!-- Merge Factor
205+ The merge factor controls how many segments will get merged at a time.
206+ For TieredMergePolicy, mergeFactor is a convenience parameter which
207+ will set both MaxMergeAtOnce and SegmentsPerTier at once.
208+ For LogByteSizeMergePolicy, mergeFactor decides how many new segments
209+ will be allowed before they are merged into one.
210+ Default is 10 for both merge policies.
211+ -->
212+ <!--
213+ <mergeFactor>10</mergeFactor>
214+ -->
215+
216+ <!-- Expert: Merge Scheduler
217+ The Merge Scheduler in Lucene controls how merges are
218+ performed. The ConcurrentMergeScheduler (Lucene 2.3 default)
219+ can perform merges in the background using separate threads.
220+ The SerialMergeScheduler (Lucene 2.2 default) does not.
221+ -->
222+ <!--
223+ <mergeScheduler class="org.apache.lucene.index.ConcurrentMergeScheduler"/>
224+ -->
225+
226+ <!-- LockFactory
227+
228+ This option specifies which Lucene LockFactory implementation
229+ to use.
230+
231+ single = SingleInstanceLockFactory - suggested for a
232+ read-only index or when there is no possibility of
233+ another process trying to modify the index.
234+ native = NativeFSLockFactory - uses OS native file locking.
235+ Do not use when multiple solr webapps in the same
236+ JVM are attempting to share a single index.
237+ simple = SimpleFSLockFactory - uses a plain file for locking
238+
239+ Defaults: 'native' is default for Solr3.6 and later, otherwise
240+ 'simple' is the default
241+
242+ More details on the nuances of each LockFactory...
243+ http://wiki.apache.org/lucene-java/AvailableLockFactories
244+ -->
245+ <lockType>${solr.lock.type:native}</lockType>
246+
247+ <!-- Unlock On Startup
248+
249+ If true, unlock any held write or commit locks on startup.
250+ This defeats the locking mechanism that allows multiple
251+ processes to safely access a lucene index, and should be used
252+ with care. Default is "false".
253+
254+ This is not needed if lock type is 'single'
255+ -->
256+ <!--
257+ <unlockOnStartup>false</unlockOnStartup>
258+ -->
259+
260+ <!-- Expert: Controls how often Lucene loads terms into memory
261+ Default is 128 and is likely good for most everyone.
262+ -->
263+ <!-- <termIndexInterval>128</termIndexInterval> -->
264+
265+ <!-- If true, IndexReaders will be reopened (often more efficient)
266+ instead of closed and then opened. Default: true
267+ -->
268+ <!--
269+ <reopenReaders>true</reopenReaders>
270+ -->
271+
272+ <!-- Commit Deletion Policy
273+ Custom deletion policies can be specified here. The class must
274+ implement org.apache.lucene.index.IndexDeletionPolicy.
275+
276+ The default Solr IndexDeletionPolicy implementation supports
277+ deleting index commit points on number of commits, age of
278+ commit point and optimized status.
279+
280+ The latest commit point should always be preserved regardless
281+ of the criteria.
282+ -->
283+ <!--
284+ <deletionPolicy class="solr.SolrDeletionPolicy">
285+ -->
286+ <!-- The number of commit points to be kept -->
287+ <!-- <str name="maxCommitsToKeep">1</str> -->
288+ <!-- The number of optimized commit points to be kept -->
289+ <!-- <str name="maxOptimizedCommitsToKeep">0</str> -->
290+ <!--
291+ Delete all commit points once they have reached the given age.
292+ Supports DateMathParser syntax e.g.
293+ -->
294+ <!--
295+ <str name="maxCommitAge">30MINUTES</str>
296+ <str name="maxCommitAge">1DAY</str>
297+ -->
298+ <!--
299+ </deletionPolicy>
300+ -->
301+
302+ <!-- Lucene Infostream
303+
304+ To aid in advanced debugging, Lucene provides an "InfoStream"
305+ of detailed information when indexing.
306+
307+ Setting the value to true will instruct the underlying Lucene
308+ IndexWriter to write its info stream to solr's log. By default,
309+ this is enabled here, and controlled through log4j.properties.
310+ -->
311+ <infoStream>true</infoStream>
312+ </indexConfig>
313+
314+
315+ <!-- JMX
316+
317+ This example enables JMX if and only if an existing MBeanServer
318+ is found, use this if you want to configure JMX through JVM
319+ parameters. Remove this to disable exposing Solr configuration
320+ and statistics to JMX.
321+
322+ For more details see http://wiki.apache.org/solr/SolrJmx
323+ -->
324+ <jmx />
325+ <!-- If you want to connect to a particular server, specify the
326+ agentId
327+ -->
328+ <!-- <jmx agentId="myAgent" /> -->
329+ <!-- If you want to start a new MBeanServer, specify the serviceUrl -->
330+ <!-- <jmx serviceUrl="service:jmx:rmi:///jndi/rmi://localhost:9999/solr"/>
331+ -->
332+
333+ <!-- The default high-performance update handler -->
334+ <updateHandler class="solr.DirectUpdateHandler2">
335+
336+ <!-- Enables a transaction log, used for real-time get, durability, and
337+ and solr cloud replica recovery. The log can grow as big as
338+ uncommitted changes to the index, so use of a hard autoCommit
339+ is recommended (see below).
340+ "dir" - the target directory for transaction logs, defaults to the
341+ solr data directory. -->
342+ <updateLog>
343+ <str name="dir">${solr.solr.home}/${solr.core.name}/txlog</str>
344+ </updateLog>
345+
346+ <!-- AutoCommit
347+
348+ Perform a hard commit automatically under certain conditions.
349+ Instead of enabling autoCommit, consider using "commitWithin"
350+ when adding documents.
351+
352+ http://wiki.apache.org/solr/UpdateXmlMessages
353+
354+ maxDocs - Maximum number of documents to add since the last
355+ commit before automatically triggering a new commit.
356+
357+ maxTime - Maximum amount of time in ms that is allowed to pass
358+ since a document was added before automatically
359+ triggering a new commit.
360+ openSearcher - if false, the commit causes recent index changes
361+ to be flushed to stable storage, but does not cause a new
362+ searcher to be opened to make those changes visible.
363+
364+ If the updateLog is enabled, then it's highly recommended to
365+ have some sort of hard autoCommit to limit the log size.
366+ -->
367+<!--
368+ <autoCommit>
369+ <maxTime>${solr.autoCommit.maxTime:15000}</maxTime>
370+ <openSearcher>false</openSearcher>
371+ </autoCommit>
372+-->
373+
374+ <!-- softAutoCommit is like autoCommit except it causes a
375+ 'soft' commit which only ensures that changes are visible
376+ but does not ensure that data is synced to disk. This is
377+ faster and more near-realtime friendly than a hard commit.
378+ -->
379+ <!--
380+ <autoSoftCommit>
381+ <maxTime>${solr.autoSoftCommit.maxTime:-1}</maxTime>
382+ </autoSoftCommit>
383+ -->
384+
385+ <!-- Update Related Event Listeners
386+
387+ Various IndexWriter related events can trigger Listeners to
388+ take actions.
389+
390+ postCommit - fired after every commit or optimize command
391+ postOptimize - fired after every optimize command
392+ -->
393+ <!-- The RunExecutableListener executes an external command from a
394+ hook such as postCommit or postOptimize.
395+
396+ exe - the name of the executable to run
397+ dir - dir to use as the current working directory. (default=".")
398+ wait - the calling thread waits until the executable returns.
399+ (default="true")
400+ args - the arguments to pass to the program. (default is none)
401+ env - environment variables to set. (default is none)
402+ -->
403+ <!-- This example shows how RunExecutableListener could be used
404+ with the script based replication...
405+ http://wiki.apache.org/solr/CollectionDistribution
406+ -->
407+ <!--
408+ <listener event="postCommit" class="solr.RunExecutableListener">
409+ <str name="exe">solr/bin/snapshooter</str>
410+ <str name="dir">.</str>
411+ <bool name="wait">true</bool>
412+ <arr name="args"> <str>arg1</str> <str>arg2</str> </arr>
413+ <arr name="env"> <str>MYVAR=val1</str> </arr>
414+ </listener>
415+ -->
416+
417+ </updateHandler>
418+
419+ <!-- IndexReaderFactory
420+
421+ Use the following format to specify a custom IndexReaderFactory,
422+ which allows for alternate IndexReader implementations.
423+
424+ ** Experimental Feature **
425+
426+ Please note - Using a custom IndexReaderFactory may prevent
427+ certain other features from working. The API to
428+ IndexReaderFactory may change without warning or may even be
429+ removed from future releases if the problems cannot be
430+ resolved.
431+
432+
433+ ** Features that may not work with custom IndexReaderFactory **
434+
435+ The ReplicationHandler assumes a disk-resident index. Using a
436+ custom IndexReader implementation may cause incompatibility
437+ with ReplicationHandler and may cause replication to not work
438+ correctly. See SOLR-1366 for details.
439+
440+ -->
441+ <!--
442+ <indexReaderFactory name="IndexReaderFactory" class="package.class">
443+ <str name="someArg">Some Value</str>
444+ </indexReaderFactory >
445+ -->
446+ <!-- By explicitly declaring the Factory, the termIndexDivisor can
447+ be specified.
448+ -->
449+ <!--
450+ <indexReaderFactory name="IndexReaderFactory"
451+ class="solr.StandardIndexReaderFactory">
452+ <int name="setTermIndexDivisor">12</int>
453+ </indexReaderFactory >
454+ -->
455+
456+ <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
457+ Query section - these settings control query time things like caches
458+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
459+ <query>
460+ <!-- Max Boolean Clauses
461+
462+ Maximum number of clauses in each BooleanQuery, an exception
463+ is thrown if exceeded.
464+
465+ ** WARNING **
466+
467+ This option actually modifies a global Lucene property that
468+ will affect all SolrCores. If multiple solrconfig.xml files
469+ disagree on this property, the value at any given moment will
470+ be based on the last SolrCore to be initialized.
471+
472+ -->
473+ <maxBooleanClauses>1024</maxBooleanClauses>
474+
475+
476+ <!-- Solr Internal Query Caches
477+
478+ There are two implementations of cache available for Solr,
479+ LRUCache, based on a synchronized LinkedHashMap, and
480+ FastLRUCache, based on a ConcurrentHashMap.
481+
482+ FastLRUCache has faster gets and slower puts in single
483+ threaded operation and thus is generally faster than LRUCache
484+ when the hit ratio of the cache is high (> 75%), and may be
485+ faster under other scenarios on multi-cpu systems.
486+ -->
487+
488+ <!-- Filter Cache
489+
490+ Cache used by SolrIndexSearcher for filters (DocSets),
491+ unordered sets of *all* documents that match a query. When a
492+ new searcher is opened, its caches may be prepopulated or
493+ "autowarmed" using data from caches in the old searcher.
494+ autowarmCount is the number of items to prepopulate. For
495+ LRUCache, the autowarmed items will be the most recently
496+ accessed items.
497+
498+ Parameters:
499+ class - the SolrCache implementation LRUCache or
500+ (LRUCache or FastLRUCache)
501+ size - the maximum number of entries in the cache
502+ initialSize - the initial capacity (number of entries) of
503+ the cache. (see java.util.HashMap)
504+ autowarmCount - the number of entries to prepopulate from
505+ and old cache.
506+ -->
507+ <filterCache class="solr.FastLRUCache"
508+ size="512"
509+ initialSize="512"
510+ autowarmCount="0"/>
511+
512+ <!-- Query Result Cache
513+
514+ Caches results of searches - ordered lists of document ids
515+ (DocList) based on a query, a sort, and the range of documents requested.
516+ -->
517+ <queryResultCache class="solr.LRUCache"
518+ size="512"
519+ initialSize="512"
520+ autowarmCount="0"/>
521+
522+ <!-- Document Cache
523+
524+ Caches Lucene Document objects (the stored fields for each
525+ document). Since Lucene internal document ids are transient,
526+ this cache will not be autowarmed.
527+ -->
528+ <documentCache class="solr.LRUCache"
529+ size="512"
530+ initialSize="512"
531+ autowarmCount="0"/>
532+
533+ <!-- Field Value Cache
534+
535+ Cache used to hold field values that are quickly accessible
536+ by document id. The fieldValueCache is created by default
537+ even if not configured here.
538+ -->
539+ <!--
540+ <fieldValueCache class="solr.FastLRUCache"
541+ size="512"
542+ autowarmCount="128"
543+ showItems="32" />
544+ -->
545+
546+ <!-- Custom Cache
547+
548+ Example of a generic cache. These caches may be accessed by
549+ name through SolrIndexSearcher.getCache(),cacheLookup(), and
550+ cacheInsert(). The purpose is to enable easy caching of
551+ user/application level data. The regenerator argument should
552+ be specified as an implementation of solr.CacheRegenerator
553+ if autowarming is desired.
554+ -->
555+ <!--
556+ <cache name="myUserCache"
557+ class="solr.LRUCache"
558+ size="4096"
559+ initialSize="1024"
560+ autowarmCount="1024"
561+ regenerator="com.mycompany.MyRegenerator"
562+ />
563+ -->
564+
565+
566+ <!-- Lazy Field Loading
567+
568+ If true, stored fields that are not requested will be loaded
569+ lazily. This can result in a significant speed improvement
570+ if the usual case is to not load all stored fields,
571+ especially if the skipped fields are large compressed text
572+ fields.
573+ -->
574+ <enableLazyFieldLoading>true</enableLazyFieldLoading>
575+
576+ <!-- Use Filter For Sorted Query
577+
578+ A possible optimization that attempts to use a filter to
579+ satisfy a search. If the requested sort does not include
580+ score, then the filterCache will be checked for a filter
581+ matching the query. If found, the filter will be used as the
582+ source of document ids, and then the sort will be applied to
583+ that.
584+
585+ For most situations, this will not be useful unless you
586+ frequently get the same search repeatedly with different sort
587+ options, and none of them ever use "score"
588+ -->
589+ <!--
590+ <useFilterForSortedQuery>true</useFilterForSortedQuery>
591+ -->
592+
593+ <!-- Result Window Size
594+
595+ An optimization for use with the queryResultCache. When a search
596+ is requested, a superset of the requested number of document ids
597+ are collected. For example, if a search for a particular query
598+ requests matching documents 10 through 19, and queryWindowSize is 50,
599+ then documents 0 through 49 will be collected and cached. Any further
600+ requests in that range can be satisfied via the cache.
601+ -->
602+ <queryResultWindowSize>20</queryResultWindowSize>
603+
604+ <!-- Maximum number of documents to cache for any entry in the
605+ queryResultCache.
606+ -->
607+ <queryResultMaxDocsCached>200</queryResultMaxDocsCached>
608+
609+ <!-- Query Related Event Listeners
610+
611+ Various IndexSearcher related events can trigger Listeners to
612+ take actions.
613+
614+ newSearcher - fired whenever a new searcher is being prepared
615+ and there is a current searcher handling requests (aka
616+ registered). It can be used to prime certain caches to
617+ prevent long request times for certain requests.
618+
619+ firstSearcher - fired whenever a new searcher is being
620+ prepared but there is no current registered searcher to handle
621+ requests or to gain autowarming data from.
622+
623+
624+ -->
625+ <!-- QuerySenderListener takes an array of NamedList and executes a
626+ local query request for each NamedList in sequence.
627+ -->
628+ <listener event="newSearcher" class="solr.QuerySenderListener">
629+ <arr name="queries">
630+ <!--
631+ <lst><str name="q">solr</str><str name="sort">price asc</str></lst>
632+ <lst><str name="q">rocks</str><str name="sort">weight asc</str></lst>
633+ -->
634+ </arr>
635+ </listener>
636+ <listener event="firstSearcher" class="solr.QuerySenderListener">
637+ <arr name="queries">
638+ <lst>
639+ <str name="q">static firstSearcher warming in solrconfig.xml</str>
640+ </lst>
641+ </arr>
642+ </listener>
643+
644+ <!-- Use Cold Searcher
645+
646+ If a search request comes in and there is no current
647+ registered searcher, then immediately register the still
648+ warming searcher and use it. If "false" then all requests
649+ will block until the first searcher is done warming.
650+ -->
651+ <useColdSearcher>false</useColdSearcher>
652+
653+ <!-- Max Warming Searchers
654+
655+ Maximum number of searchers that may be warming in the
656+ background concurrently. An error is returned if this limit
657+ is exceeded.
658+
659+ Recommend values of 1-2 for read-only slaves, higher for
660+ masters w/o cache warming.
661+ -->
662+ <maxWarmingSearchers>2</maxWarmingSearchers>
663+
664+ </query>
665+
666+
667+ <!-- Request Dispatcher
668+
669+ This section contains instructions for how the SolrDispatchFilter
670+ should behave when processing requests for this SolrCore.
671+
672+ handleSelect is a legacy option that affects the behavior of requests
673+ such as /select?qt=XXX
674+
675+ handleSelect="true" will cause the SolrDispatchFilter to process
676+ the request and dispatch the query to a handler specified by the
677+ "qt" param, assuming "/select" isn't already registered.
678+
679+ handleSelect="false" will cause the SolrDispatchFilter to
680+ ignore "/select" requests, resulting in a 404 unless a handler
681+ is explicitly registered with the name "/select"
682+
683+ handleSelect="true" is not recommended for new users, but is the default
684+ for backwards compatibility
685+ -->
686+ <requestDispatcher handleSelect="false" >
687+ <!-- Request Parsing
688+
689+ These settings indicate how Solr Requests may be parsed, and
690+ what restrictions may be placed on the ContentStreams from
691+ those requests
692+
693+ enableRemoteStreaming - enables use of the stream.file
694+ and stream.url parameters for specifying remote streams.
695+
696+ multipartUploadLimitInKB - specifies the max size (in KiB) of
697+ Multipart File Uploads that Solr will allow in a Request.
698+
699+ formdataUploadLimitInKB - specifies the max size (in KiB) of
700+ form data (application/x-www-form-urlencoded) sent via
701+ POST. You can use POST to pass request parameters not
702+ fitting into the URL.
703+
704+ addHttpRequestToContext - if set to true, it will instruct
705+ the requestParsers to include the original HttpServletRequest
706+ object in the context map of the SolrQueryRequest under the
707+ key "httpRequest". It will not be used by any of the existing
708+ Solr components, but may be useful when developing custom
709+ plugins.
710+
711+ *** WARNING ***
712+ The settings below authorize Solr to fetch remote files, You
713+ should make sure your system has some authentication before
714+ using enableRemoteStreaming="true"
715+
716+ -->
717+ <requestParsers enableRemoteStreaming="true"
718+ multipartUploadLimitInKB="2048000"
719+ formdataUploadLimitInKB="2048"
720+ addHttpRequestToContext="false"/>
721+
722+ <!-- HTTP Caching
723+
724+ Set HTTP caching related parameters (for proxy caches and clients).
725+
726+ The options below instruct Solr not to output any HTTP Caching
727+ related headers
728+ -->
729+ <httpCaching never304="true" />
730+ <!-- If you include a <cacheControl> directive, it will be used to
731+ generate a Cache-Control header (as well as an Expires header
732+ if the value contains "max-age=")
733+
734+ By default, no Cache-Control header is generated.
735+
736+ You can use the <cacheControl> option even if you have set
737+ never304="true"
738+ -->
739+ <!--
740+ <httpCaching never304="true" >
741+ <cacheControl>max-age=30, public</cacheControl>
742+ </httpCaching>
743+ -->
744+ <!-- To enable Solr to respond with automatically generated HTTP
745+ Caching headers, and to response to Cache Validation requests
746+ correctly, set the value of never304="false"
747+
748+ This will cause Solr to generate Last-Modified and ETag
749+ headers based on the properties of the Index.
750+
751+ The following options can also be specified to affect the
752+ values of these headers...
753+
754+ lastModFrom - the default value is "openTime" which means the
755+ Last-Modified value (and validation against If-Modified-Since
756+ requests) will all be relative to when the current Searcher
757+ was opened. You can change it to lastModFrom="dirLastMod" if
758+ you want the value to exactly correspond to when the physical
759+ index was last modified.
760+
761+ etagSeed="..." is an option you can change to force the ETag
762+ header (and validation against If-None-Match requests) to be
763+ different even if the index has not changed (ie: when making
764+ significant changes to your config file)
765+
766+ (lastModifiedFrom and etagSeed are both ignored if you use
767+ the never304="true" option)
768+ -->
769+ <!--
770+ <httpCaching lastModifiedFrom="openTime"
771+ etagSeed="Solr">
772+ <cacheControl>max-age=30, public</cacheControl>
773+ </httpCaching>
774+ -->
775+ </requestDispatcher>
776+
777+ <!-- Request Handlers
778+
779+ http://wiki.apache.org/solr/SolrRequestHandler
780+
781+ Incoming queries will be dispatched to a specific handler by name
782+ based on the path specified in the request.
783+
784+ Legacy behavior: If the request path uses "/select" but no Request
785+ Handler has that name, and if handleSelect="true" has been specified in
786+ the requestDispatcher, then the Request Handler is dispatched based on
787+ the qt parameter. Handlers without a leading '/' are accessed this way
788+ like so: http://host/app/[core/]select?qt=name If no qt is
789+ given, then the requestHandler that declares default="true" will be
790+ used or the one named "standard".
791+
792+ If a Request Handler is declared with startup="lazy", then it will
793+ not be initialized until the first request that uses it.
794+
795+ -->
796+ <!-- SearchHandler
797+
798+ http://wiki.apache.org/solr/SearchHandler
799+
800+ For processing Search Queries, the primary Request Handler
801+ provided with Solr is "SearchHandler" It delegates to a sequent
802+ of SearchComponents (see below) and supports distributed
803+ queries across multiple shards
804+ -->
805+ <requestHandler name="/select" class="solr.SearchHandler">
806+ <!-- default values for query parameters can be specified, these
807+ will be overridden by parameters in the request
808+ -->
809+ <lst name="defaults">
810+ <str name="echoParams">explicit</str>
811+ <int name="rows">10</int>
812+ <str name="df">content</str>
813+ </lst>
814+ <!-- In addition to defaults, "appends" params can be specified
815+ to identify values which should be appended to the list of
816+ multi-val params from the query (or the existing "defaults").
817+ -->
818+ <!-- In this example, the param "fq=instock:true" would be appended to
819+ any query time fq params the user may specify, as a mechanism for
820+ partitioning the index, independent of any user selected filtering
821+ that may also be desired (perhaps as a result of faceted searching).
822+
823+ NOTE: there is *absolutely* nothing a client can do to prevent these
824+ "appends" values from being used, so don't use this mechanism
825+ unless you are sure you always want it.
826+ -->
827+ <!--
828+ <lst name="appends">
829+ <str name="fq">inStock:true</str>
830+ </lst>
831+ -->
832+ <!-- "invariants" are a way of letting the Solr maintainer lock down
833+ the options available to Solr clients. Any params values
834+ specified here are used regardless of what values may be specified
835+ in either the query, the "defaults", or the "appends" params.
836+
837+ In this example, the facet.field and facet.query params would
838+ be fixed, limiting the facets clients can use. Faceting is
839+ not turned on by default - but if the client does specify
840+ facet=true in the request, these are the only facets they
841+ will be able to see counts for; regardless of what other
842+ facet.field or facet.query params they may specify.
843+
844+ NOTE: there is *absolutely* nothing a client can do to prevent these
845+ "invariants" values from being used, so don't use this mechanism
846+ unless you are sure you always want it.
847+ -->
848+ <!--
849+ <lst name="invariants">
850+ <str name="facet.field">cat</str>
851+ <str name="facet.field">manu_exact</str>
852+ <str name="facet.query">price:[* TO 500]</str>
853+ <str name="facet.query">price:[500 TO *]</str>
854+ </lst>
855+ -->
856+ <!-- If the default list of SearchComponents is not desired, that
857+ list can either be overridden completely, or components can be
858+ prepended or appended to the default list. (see below)
859+ -->
860+ <!--
861+ <arr name="components">
862+ <str>nameOfCustomComponent1</str>
863+ <str>nameOfCustomComponent2</str>
864+ </arr>
865+ -->
866+ </requestHandler>
867+
868+ <!-- A request handler that returns indented JSON by default -->
869+ <requestHandler name="/query" class="solr.SearchHandler">
870+ <lst name="defaults">
871+ <str name="echoParams">explicit</str>
872+ <str name="wt">json</str>
873+ <str name="indent">true</str>
874+ <str name="df">content</str>
875+ </lst>
876+ </requestHandler>
877+
878+
879+ <!-- realtime get handler, guaranteed to return the latest stored fields of
880+ any document, without the need to commit or open a new searcher. The
881+ current implementation relies on the updateLog feature being enabled. -->
882+ <requestHandler name="/get" class="solr.RealTimeGetHandler">
883+ <lst name="defaults">
884+ <str name="omitHeader">true</str>
885+ <str name="wt">json</str>
886+ <str name="indent">true</str>
887+ </lst>
888+ </requestHandler>
889+
890+
891+ <!-- A Robust Example
892+
893+ This example SearchHandler declaration shows off usage of the
894+ SearchHandler with many defaults declared
895+
896+ Note that multiple instances of the same Request Handler
897+ (SearchHandler) can be registered multiple times with different
898+ names (and different init parameters)
899+ -->
900+ <requestHandler name="/browse" class="solr.SearchHandler">
901+ <lst name="defaults">
902+ <str name="echoParams">explicit</str>
903+
904+ <!-- VelocityResponseWriter settings -->
905+ <str name="wt">velocity</str>
906+ <str name="v.template">browse</str>
907+ <str name="v.layout">layout</str>
908+ <str name="title">Solritas</str>
909+
910+ <!-- Query settings -->
911+ <str name="defType">edismax</str>
912+ <str name="qf">
913+ content^0.5 title^10.0
914+ </str>
915+ <str name="df">content</str>
916+ <str name="mm">100%</str>
917+ <str name="q.alt">*:*</str>
918+ <str name="rows">10</str>
919+ <str name="fl">*,score</str>
920+
921+ <str name="mlt.qf">
922+ content^0.5 title^10.0
923+ </str>
924+ <str name="mlt.fl">content,title</str>
925+ <int name="mlt.count">3</int>
926+
927+ <!-- Faceting defaults -->
928+ <str name="facet">on</str>
929+ <str name="facet.field">cat</str>
930+ <str name="facet.field">manu_exact</str>
931+ <str name="facet.field">content_type</str>
932+ <str name="facet.field">author_s</str>
933+ <str name="facet.query">ipod</str>
934+ <str name="facet.query">GB</str>
935+ <str name="facet.mincount">1</str>
936+ <str name="facet.pivot">cat,inStock</str>
937+ <str name="facet.range.other">after</str>
938+ <str name="facet.range">price</str>
939+ <int name="f.price.facet.range.start">0</int>
940+ <int name="f.price.facet.range.end">600</int>
941+ <int name="f.price.facet.range.gap">50</int>
942+ <str name="facet.range">popularity</str>
943+ <int name="f.popularity.facet.range.start">0</int>
944+ <int name="f.popularity.facet.range.end">10</int>
945+ <int name="f.popularity.facet.range.gap">3</int>
946+ <str name="facet.range">manufacturedate_dt</str>
947+ <str name="f.manufacturedate_dt.facet.range.start">NOW/YEAR-10YEARS</str>
948+ <str name="f.manufacturedate_dt.facet.range.end">NOW</str>
949+ <str name="f.manufacturedate_dt.facet.range.gap">+1YEAR</str>
950+ <str name="f.manufacturedate_dt.facet.range.other">before</str>
951+ <str name="f.manufacturedate_dt.facet.range.other">after</str>
952+
953+ <!-- Highlighting defaults -->
954+ <str name="hl">on</str>
955+ <str name="hl.fl">content features title name</str>
956+ <str name="hl.encoder">html</str>
957+ <str name="hl.simple.pre">&lt;b&gt;</str>
958+ <str name="hl.simple.post">&lt;/b&gt;</str>
959+ <str name="f.title.hl.fragsize">0</str>
960+ <str name="f.title.hl.alternateField">title</str>
961+ <str name="f.name.hl.fragsize">0</str>
962+ <str name="f.name.hl.alternateField">name</str>
963+ <str name="f.content.hl.snippets">3</str>
964+ <str name="f.content.hl.fragsize">200</str>
965+ <str name="f.content.hl.alternateField">content</str>
966+ <str name="f.content.hl.maxAlternateFieldLength">750</str>
967+
968+ <!-- Spell checking defaults -->
969+ <str name="spellcheck">on</str>
970+ <str name="spellcheck.extendedResults">false</str>
971+ <str name="spellcheck.count">5</str>
972+ <str name="spellcheck.alternativeTermCount">2</str>
973+ <str name="spellcheck.maxResultsForSuggest">5</str>
974+ <str name="spellcheck.collate">true</str>
975+ <str name="spellcheck.collateExtendedResults">true</str>
976+ <str name="spellcheck.maxCollationTries">5</str>
977+ <str name="spellcheck.maxCollations">3</str>
978+ </lst>
979+
980+ <!-- append spellchecking to our list of components -->
981+ <arr name="last-components">
982+ <str>spellcheck</str>
983+ </arr>
984+ </requestHandler>
985+
986+
987+ <!-- Update Request Handler.
988+
989+ http://wiki.apache.org/solr/UpdateXmlMessages
990+
991+ The canonical Request Handler for Modifying the Index through
992+ commands specified using XML, JSON, CSV, or JAVABIN
993+
994+ Note: Since solr1.1 requestHandlers requires a valid content
995+ type header if posted in the body. For example, curl now
996+ requires: -H 'Content-type:text/xml; charset=utf-8'
997+
998+ To override the request content type and force a specific
999+ Content-type, use the request parameter:
1000+ ?update.contentType=text/csv
1001+
1002+ This handler will pick a response format to match the input
1003+ if the 'wt' parameter is not explicit
1004+ -->
1005+ <requestHandler name="/update" class="solr.UpdateRequestHandler">
1006+ <!-- See below for information on defining
1007+ updateRequestProcessorChains that can be used by name
1008+ on each Update Request
1009+ -->
1010+ <!--
1011+ <lst name="defaults">
1012+ <str name="update.chain">dedupe</str>
1013+ </lst>
1014+ -->
1015+ <lst name="defaults">
1016+ <str name="update.chain">langid</str>
1017+ </lst>
1018+ </requestHandler>
1019+
1020+ <!-- for back compat with clients using /update/json and /update/csv -->
1021+ <requestHandler name="/update/json" class="solr.JsonUpdateRequestHandler">
1022+ <lst name="defaults">
1023+ <str name="stream.contentType">application/json</str>
1024+ </lst>
1025+ </requestHandler>
1026+ <requestHandler name="/update/csv" class="solr.CSVRequestHandler">
1027+ <lst name="defaults">
1028+ <str name="stream.contentType">application/csv</str>
1029+ </lst>
1030+ </requestHandler>
1031+
1032+ <!-- Solr Cell Update Request Handler
1033+
1034+ http://wiki.apache.org/solr/ExtractingRequestHandler
1035+
1036+ -->
1037+ <requestHandler name="/update/extract"
1038+ startup="lazy"
1039+ class="solr.extraction.ExtractingRequestHandler" >
1040+ <lst name="defaults">
1041+ <str name="lowernames">true</str>
1042+ <str name="uprefix">ignored_</str>
1043+
1044+ <!-- capture link hrefs but ignore div attributes -->
1045+ <str name="captureAttr">true</str>
1046+ <str name="fmap.a">links</str>
1047+ <str name="fmap.div">ignored_</str>
1048+ </lst>
1049+ </requestHandler>
1050+
1051+
1052+ <!-- Field Analysis Request Handler
1053+
1054+ RequestHandler that provides much the same functionality as
1055+ analysis.jsp. Provides the ability to specify multiple field
1056+ types and field names in the same request and outputs
1057+ index-time and query-time analysis for each of them.
1058+
1059+ Request parameters are:
1060+ analysis.fieldname - field name whose analyzers are to be used
1061+
1062+ analysis.fieldtype - field type whose analyzers are to be used
1063+ analysis.fieldvalue - text for index-time analysis
1064+ q (or analysis.q) - text for query time analysis
1065+ analysis.showmatch (true|false) - When set to true and when
1066+ query analysis is performed, the produced tokens of the
1067+ field value analysis will be marked as "matched" for every
1068+ token that is produces by the query analysis
1069+ -->
1070+ <requestHandler name="/analysis/field"
1071+ startup="lazy"
1072+ class="solr.FieldAnalysisRequestHandler" />
1073+
1074+
1075+ <!-- Document Analysis Handler
1076+
1077+ http://wiki.apache.org/solr/AnalysisRequestHandler
1078+
1079+ An analysis handler that provides a breakdown of the analysis
1080+ process of provided documents. This handler expects a (single)
1081+ content stream with the following format:
1082+
1083+ <docs>
1084+ <doc>
1085+ <field name="id">1</field>
1086+ <field name="name">The Name</field>
1087+ <field name="text">The Text Value</field>
1088+ </doc>
1089+ <doc>...</doc>
1090+ <doc>...</doc>
1091+ ...
1092+ </docs>
1093+
1094+ Note: Each document must contain a field which serves as the
1095+ unique key. This key is used in the returned response to associate
1096+ an analysis breakdown to the analyzed document.
1097+
1098+ Like the FieldAnalysisRequestHandler, this handler also supports
1099+ query analysis by sending either an "analysis.query" or "q"
1100+ request parameter that holds the query text to be analyzed. It
1101+ also supports the "analysis.showmatch" parameter which when set to
1102+ true, all field tokens that match the query tokens will be marked
1103+ as a "match".
1104+ -->
1105+ <requestHandler name="/analysis/document"
1106+ class="solr.DocumentAnalysisRequestHandler"
1107+ startup="lazy" />
1108+
1109+ <!-- Admin Handlers
1110+
1111+ Admin Handlers - This will register all the standard admin
1112+ RequestHandlers.
1113+ -->
1114+ <requestHandler name="/admin/"
1115+ class="solr.admin.AdminHandlers" />
1116+ <!-- This single handler is equivalent to the following... -->
1117+ <!--
1118+ <requestHandler name="/admin/luke" class="solr.admin.LukeRequestHandler" />
1119+ <requestHandler name="/admin/system" class="solr.admin.SystemInfoHandler" />
1120+ <requestHandler name="/admin/plugins" class="solr.admin.PluginInfoHandler" />
1121+ <requestHandler name="/admin/threads" class="solr.admin.ThreadDumpHandler" />
1122+ <requestHandler name="/admin/properties" class="solr.admin.PropertiesRequestHandler" />
1123+ <requestHandler name="/admin/file" class="solr.admin.ShowFileRequestHandler" >
1124+ -->
1125+ <!-- If you wish to hide files under ${solr.home}/conf, explicitly
1126+ register the ShowFileRequestHandler using:
1127+ -->
1128+ <!--
1129+ <requestHandler name="/admin/file"
1130+ class="solr.admin.ShowFileRequestHandler" >
1131+ <lst name="invariants">
1132+ <str name="hidden">synonyms.txt</str>
1133+ <str name="hidden">anotherfile.txt</str>
1134+ </lst>
1135+ </requestHandler>
1136+ -->
1137+
1138+ <!-- ping/healthcheck -->
1139+ <requestHandler name="/admin/ping" class="solr.PingRequestHandler">
1140+ <lst name="invariants">
1141+ <str name="q">solrpingquery</str>
1142+ </lst>
1143+ <lst name="defaults">
1144+ <str name="echoParams">all</str>
1145+ </lst>
1146+ <!-- An optional feature of the PingRequestHandler is to configure the
1147+ handler with a "healthcheckFile" which can be used to enable/disable
1148+ the PingRequestHandler.
1149+ relative paths are resolved against the data dir
1150+ -->
1151+ <!-- <str name="healthcheckFile">server-enabled.txt</str> -->
1152+ </requestHandler>
1153+
1154+ <!-- Echo the request contents back to the client -->
1155+ <requestHandler name="/debug/dump" class="solr.DumpRequestHandler" >
1156+ <lst name="defaults">
1157+ <str name="echoParams">explicit</str>
1158+ <str name="echoHandler">true</str>
1159+ </lst>
1160+ </requestHandler>
1161+
1162+ <!-- Solr Replication
1163+
1164+ The SolrReplicationHandler supports replicating indexes from a
1165+ "master" used for indexing and "slaves" used for queries.
1166+
1167+ http://wiki.apache.org/solr/SolrReplication
1168+
1169+ It is also necessary for SolrCloud to function (in Cloud mode, the
1170+ replication handler is used to bulk transfer segments when nodes
1171+ are added or need to recover).
1172+
1173+ https://wiki.apache.org/solr/SolrCloud/
1174+ -->
1175+ <requestHandler name="/replication" class="solr.ReplicationHandler" >
1176+ <!--
1177+ To enable simple master/slave replication, uncomment one of the
1178+ sections below, depending on whether this solr instance should be
1179+ the "master" or a "slave". If this instance is a "slave" you will
1180+ also need to fill in the masterUrl to point to a real machine.
1181+ -->
1182+ <!--
1183+ <lst name="master">
1184+ <str name="replicateAfter">commit</str>
1185+ <str name="replicateAfter">startup</str>
1186+ <str name="confFiles">schema.xml,stopwords.txt</str>
1187+ </lst>
1188+ -->
1189+ <!--
1190+ <lst name="slave">
1191+ <str name="masterUrl">http://your-master-hostname:8983/solr</str>
1192+ <str name="pollInterval">00:00:60</str>
1193+ </lst>
1194+ -->
1195+ </requestHandler>
1196+
1197+ <!-- Search Components
1198+
1199+ Search components are registered to SolrCore and used by
1200+ instances of SearchHandler (which can access them by name)
1201+
1202+ By default, the following components are available:
1203+
1204+ <searchComponent name="query" class="solr.QueryComponent" />
1205+ <searchComponent name="facet" class="solr.FacetComponent" />
1206+ <searchComponent name="mlt" class="solr.MoreLikeThisComponent" />
1207+ <searchComponent name="highlight" class="solr.HighlightComponent" />
1208+ <searchComponent name="stats" class="solr.StatsComponent" />
1209+ <searchComponent name="debug" class="solr.DebugComponent" />
1210+
1211+ Default configuration in a requestHandler would look like:
1212+
1213+ <arr name="components">
1214+ <str>query</str>
1215+ <str>facet</str>
1216+ <str>mlt</str>
1217+ <str>highlight</str>
1218+ <str>stats</str>
1219+ <str>debug</str>
1220+ </arr>
1221+
1222+ If you register a searchComponent to one of the standard names,
1223+ that will be used instead of the default.
1224+
1225+ To insert components before or after the 'standard' components, use:
1226+
1227+ <arr name="first-components">
1228+ <str>myFirstComponentName</str>
1229+ </arr>
1230+
1231+ <arr name="last-components">
1232+ <str>myLastComponentName</str>
1233+ </arr>
1234+
1235+ NOTE: The component registered with the name "debug" will
1236+ always be executed after the "last-components"
1237+
1238+ -->
1239+
1240+ <!-- Spell Check
1241+
1242+ The spell check component can return a list of alternative spelling
1243+ suggestions.
1244+
1245+ http://wiki.apache.org/solr/SpellCheckComponent
1246+ -->
1247+ <searchComponent name="spellcheck" class="solr.SpellCheckComponent">
1248+
1249+ <str name="queryAnalyzerFieldType">content</str>
1250+
1251+ <!-- Multiple "Spell Checkers" can be declared and used by this
1252+ component
1253+ -->
1254+
1255+ <!-- a spellchecker built from a field of the main index -->
1256+ <lst name="spellchecker">
1257+ <str name="name">default</str>
1258+ <str name="field">content</str>
1259+ <str name="classname">solr.DirectSolrSpellChecker</str>
1260+ <!-- the spellcheck distance measure used, the default is the internal levenshtein -->
1261+ <str name="distanceMeasure">internal</str>
1262+ <!-- minimum accuracy needed to be considered a valid spellcheck suggestion -->
1263+ <float name="accuracy">0.5</float>
1264+ <!-- the maximum #edits we consider when enumerating terms: can be 1 or 2 -->
1265+ <int name="maxEdits">2</int>
1266+ <!-- the minimum shared prefix when enumerating terms -->
1267+ <int name="minPrefix">1</int>
1268+ <!-- maximum number of inspections per result. -->
1269+ <int name="maxInspections">5</int>
1270+ <!-- minimum length of a query term to be considered for correction -->
1271+ <int name="minQueryLength">4</int>
1272+ <!-- maximum threshold of documents a query term can appear to be considered for correction -->
1273+ <float name="maxQueryFrequency">0.01</float>
1274+ <!-- uncomment this to require suggestions to occur in 1% of the documents
1275+ <float name="thresholdTokenFrequency">.01</float>
1276+ -->
1277+ </lst>
1278+
1279+ <!-- a spellchecker that can break or combine words. See "/spell" handler below for usage -->
1280+ <lst name="spellchecker">
1281+ <str name="name">wordbreak</str>
1282+ <str name="classname">solr.WordBreakSolrSpellChecker</str>
1283+ <str name="field">name</str>
1284+ <str name="combineWords">true</str>
1285+ <str name="breakWords">true</str>
1286+ <int name="maxChanges">10</int>
1287+ </lst>
1288+
1289+ <!-- a spellchecker that uses a different distance measure -->
1290+ <!--
1291+ <lst name="spellchecker">
1292+ <str name="name">jarowinkler</str>
1293+ <str name="field">spell</str>
1294+ <str name="classname">solr.DirectSolrSpellChecker</str>
1295+ <str name="distanceMeasure">
1296+ org.apache.lucene.search.spell.JaroWinklerDistance
1297+ </str>
1298+ </lst>
1299+ -->
1300+
1301+ <!-- a spellchecker that use an alternate comparator
1302+
1303+ comparatorClass be one of:
1304+ 1. score (default)
1305+ 2. freq (Frequency first, then score)
1306+ 3. A fully qualified class name
1307+ -->
1308+ <!--
1309+ <lst name="spellchecker">
1310+ <str name="name">freq</str>
1311+ <str name="field">lowerfilt</str>
1312+ <str name="classname">solr.DirectSolrSpellChecker</str>
1313+ <str name="comparatorClass">freq</str>
1314+ -->
1315+
1316+ <!-- A spellchecker that reads the list of words from a file -->
1317+ <!--
1318+ <lst name="spellchecker">
1319+ <str name="classname">solr.FileBasedSpellChecker</str>
1320+ <str name="name">file</str>
1321+ <str name="sourceLocation">spellings.txt</str>
1322+ <str name="characterEncoding">UTF-8</str>
1323+ <str name="spellcheckIndexDir">spellcheckerFile</str>
1324+ </lst>
1325+ -->
1326+ </searchComponent>
1327+
1328+ <!-- A request handler for demonstrating the spellcheck component.
1329+
1330+ NOTE: This is purely as an example. The whole purpose of the
1331+ SpellCheckComponent is to hook it into the request handler that
1332+ handles your normal user queries so that a separate request is
1333+ not needed to get suggestions.
1334+
1335+ IN OTHER WORDS, THERE IS REALLY GOOD CHANCE THE SETUP BELOW IS
1336+ NOT WHAT YOU WANT FOR YOUR PRODUCTION SYSTEM!
1337+
1338+ See http://wiki.apache.org/solr/SpellCheckComponent for details
1339+ on the request parameters.
1340+ -->
1341+ <requestHandler name="/spell" class="solr.SearchHandler" startup="lazy">
1342+ <lst name="defaults">
1343+ <str name="df">content</str>
1344+ <!-- Solr will use suggestions from both the 'default' spellchecker
1345+ and from the 'wordbreak' spellchecker and combine them.
1346+ collations (re-written queries) can include a combination of
1347+ corrections from both spellcheckers -->
1348+ <str name="spellcheck.dictionary">default</str>
1349+ <str name="spellcheck.dictionary">wordbreak</str>
1350+ <str name="spellcheck">on</str>
1351+ <str name="spellcheck.extendedResults">true</str>
1352+ <str name="spellcheck.count">10</str>
1353+ <str name="spellcheck.alternativeTermCount">5</str>
1354+ <str name="spellcheck.maxResultsForSuggest">5</str>
1355+ <str name="spellcheck.collate">true</str>
1356+ <str name="spellcheck.collateExtendedResults">true</str>
1357+ <str name="spellcheck.maxCollationTries">10</str>
1358+ <str name="spellcheck.maxCollations">5</str>
1359+ </lst>
1360+ <arr name="last-components">
1361+ <str>spellcheck</str>
1362+ </arr>
1363+ </requestHandler>
1364+
1365+ <!-- a suggest component -->
1366+ <!-- content field -->
1367+ <searchComponent class="solr.SpellCheckComponent" name="suggestContent">
1368+ <lst name="spellchecker">
1369+ <str name="name">suggestContent</str>
1370+ <str name="classname">org.apache.solr.spelling.suggest.Suggester</str>
1371+ <str name="lookupImpl">org.apache.solr.spelling.suggest.fst.WFSTLookupFactory</str>
1372+ <str name="field">content</str>
1373+ <float name="threshold">0.005</float>
1374+ <str name="buildOnCommit">true</str>
1375+ </lst>
1376+ </searchComponent>
1377+ <requestHandler class="org.apache.solr.handler.component.SearchHandler" name="/suggest/content">
1378+ <lst name="defaults">
1379+ <str name="spellcheck">true</str>
1380+ <str name="spellcheck.dictionary">suggestContent</str>
1381+ <str name="spellcheck.onlyMorePopular">true</str>
1382+ <str name="spellcheck.count">5</str>
1383+ <str name="spellcheck.collate">true</str>
1384+ </lst>
1385+ <arr name="components">
1386+ <str>suggestContent</str>
1387+ </arr>
1388+ </requestHandler>
1389+ <!-- content_ja field -->
1390+ <searchComponent class="solr.SpellCheckComponent" name="suggestContentJa">
1391+ <lst name="spellchecker">
1392+ <str name="name">suggestContentJa</str>
1393+ <str name="classname">org.apache.solr.spelling.suggest.Suggester</str>
1394+ <str name="lookupImpl">org.apache.solr.spelling.suggest.fst.WFSTLookupFactory</str>
1395+ <str name="field">content_ja</str>
1396+ <float name="threshold">0.005</float>
1397+ <str name="buildOnCommit">true</str>
1398+ </lst>
1399+ </searchComponent>
1400+ <requestHandler class="org.apache.solr.handler.component.SearchHandler" name="/suggest/content_ja">
1401+ <lst name="defaults">
1402+ <str name="spellcheck">true</str>
1403+ <str name="spellcheck.dictionary">suggestContentJa</str>
1404+ <str name="spellcheck.onlyMorePopular">true</str>
1405+ <str name="spellcheck.count">5</str>
1406+ <str name="spellcheck.collate">true</str>
1407+ </lst>
1408+ <arr name="components">
1409+ <str>suggestContentJa</str>
1410+ </arr>
1411+ </requestHandler>
1412+ <!-- content_ts field -->
1413+ <searchComponent class="solr.SpellCheckComponent" name="suggestContentTs">
1414+ <lst name="spellchecker">
1415+ <str name="name">suggestContentTs</str>
1416+ <str name="classname">org.apache.solr.spelling.suggest.Suggester</str>
1417+ <str name="lookupImpl">org.apache.solr.spelling.suggest.fst.WFSTLookupFactory</str>
1418+ <str name="field">content_ts</str>
1419+ <float name="threshold">0.005</float>
1420+ <str name="buildOnCommit">true</str>
1421+ </lst>
1422+ </searchComponent>
1423+ <requestHandler class="org.apache.solr.handler.component.SearchHandler" name="/suggest/content_ts">
1424+ <lst name="defaults">
1425+ <str name="spellcheck">true</str>
1426+ <str name="spellcheck.dictionary">suggestContentTs</str>
1427+ <str name="spellcheck.onlyMorePopular">true</str>
1428+ <str name="spellcheck.count">5</str>
1429+ <str name="spellcheck.collate">true</str>
1430+ </lst>
1431+ <arr name="components">
1432+ <str>suggestContentTs</str>
1433+ </arr>
1434+ </requestHandler>
1435+ <!-- title_ss field -->
1436+ <searchComponent class="solr.SpellCheckComponent" name="suggestTitleSs">
1437+ <lst name="spellchecker">
1438+ <str name="name">suggestTitleSs</str>
1439+ <str name="classname">org.apache.solr.spelling.suggest.Suggester</str>
1440+ <str name="lookupImpl">org.apache.solr.spelling.suggest.fst.WFSTLookupFactory</str>
1441+ <str name="field">content_ja</str>
1442+ <float name="threshold">0.005</float>
1443+ <str name="buildOnCommit">true</str>
1444+ </lst>
1445+ </searchComponent>
1446+ <requestHandler class="org.apache.solr.handler.component.SearchHandler" name="/suggest/title_ss">
1447+ <lst name="defaults">
1448+ <str name="spellcheck">true</str>
1449+ <str name="spellcheck.dictionary">suggestTitleSs</str>
1450+ <str name="spellcheck.onlyMorePopular">true</str>
1451+ <str name="spellcheck.count">5</str>
1452+ <str name="spellcheck.collate">true</str>
1453+ </lst>
1454+ <arr name="components">
1455+ <str>suggestTitleSs</str>
1456+ </arr>
1457+ </requestHandler>
1458+
1459+ <!-- Term Vector Component
1460+
1461+ http://wiki.apache.org/solr/TermVectorComponent
1462+ -->
1463+ <searchComponent name="tvComponent" class="solr.TermVectorComponent"/>
1464+
1465+ <!-- A request handler for demonstrating the term vector component
1466+
1467+ This is purely as an example.
1468+
1469+ In reality you will likely want to add the component to your
1470+ already specified request handlers.
1471+ -->
1472+ <requestHandler name="/tvrh" class="solr.SearchHandler" startup="lazy">
1473+ <lst name="defaults">
1474+ <str name="df">content</str>
1475+ <bool name="tv">true</bool>
1476+ </lst>
1477+ <arr name="last-components">
1478+ <str>tvComponent</str>
1479+ </arr>
1480+ </requestHandler>
1481+
1482+ <!-- Clustering Component
1483+
1484+ http://wiki.apache.org/solr/ClusteringComponent
1485+
1486+ You'll need to set the solr.clustering.enabled system property
1487+ when running solr to run with clustering enabled:
1488+
1489+ java -Dsolr.clustering.enabled=true -jar start.jar
1490+
1491+ -->
1492+ <searchComponent name="clustering"
1493+ enable="${solr.clustering.enabled:false}"
1494+ class="solr.clustering.ClusteringComponent" >
1495+ <!-- Declare an engine -->
1496+ <lst name="engine">
1497+ <!-- The name, only one can be named "default" -->
1498+ <str name="name">default</str>
1499+
1500+ <!-- Class name of Carrot2 clustering algorithm.
1501+
1502+ Currently available algorithms are:
1503+
1504+ * org.carrot2.clustering.lingo.LingoClusteringAlgorithm
1505+ * org.carrot2.clustering.stc.STCClusteringAlgorithm
1506+ * org.carrot2.clustering.kmeans.BisectingKMeansClusteringAlgorithm
1507+
1508+ See http://project.carrot2.org/algorithms.html for the
1509+ algorithm's characteristics.
1510+ -->
1511+ <str name="carrot.algorithm">org.carrot2.clustering.lingo.LingoClusteringAlgorithm</str>
1512+
1513+ <!-- Overriding values for Carrot2 default algorithm attributes.
1514+
1515+ For a description of all available attributes, see:
1516+ http://download.carrot2.org/stable/manual/#chapter.components.
1517+ Use attribute key as name attribute of str elements
1518+ below. These can be further overridden for individual
1519+ requests by specifying attribute key as request parameter
1520+ name and attribute value as parameter value.
1521+ -->
1522+ <str name="LingoClusteringAlgorithm.desiredClusterCountBase">20</str>
1523+
1524+ <!-- Location of Carrot2 lexical resources.
1525+
1526+ A directory from which to load Carrot2-specific stop words
1527+ and stop labels. Absolute or relative to Solr config directory.
1528+ If a specific resource (e.g. stopwords.en) is present in the
1529+ specified dir, it will completely override the corresponding
1530+ default one that ships with Carrot2.
1531+
1532+ For an overview of Carrot2 lexical resources, see:
1533+ http://download.carrot2.org/head/manual/#chapter.lexical-resources
1534+ -->
1535+ <str name="carrot.lexicalResourcesDir">clustering/carrot2</str>
1536+
1537+ <!-- The language to assume for the documents.
1538+
1539+ For a list of allowed values, see:
1540+ http://download.carrot2.org/stable/manual/#section.attribute.lingo.MultilingualClustering.defaultLanguage
1541+ -->
1542+ <str name="MultilingualClustering.defaultLanguage">ENGLISH</str>
1543+ </lst>
1544+ <lst name="engine">
1545+ <str name="name">stc</str>
1546+ <str name="carrot.algorithm">org.carrot2.clustering.stc.STCClusteringAlgorithm</str>
1547+ </lst>
1548+ </searchComponent>
1549+
1550+ <!-- A request handler for demonstrating the clustering component
1551+
1552+ This is purely as an example.
1553+
1554+ In reality you will likely want to add the component to your
1555+ already specified request handlers.
1556+ -->
1557+ <requestHandler name="/clustering"
1558+ startup="lazy"
1559+ enable="${solr.clustering.enabled:false}"
1560+ class="solr.SearchHandler">
1561+ <lst name="defaults">
1562+ <bool name="clustering">true</bool>
1563+ <str name="clustering.engine">default</str>
1564+ <bool name="clustering.results">true</bool>
1565+ <!-- The title field -->
1566+ <str name="carrot.title">name</str>
1567+ <str name="carrot.url">id</str>
1568+ <!-- The field to cluster on -->
1569+ <str name="carrot.snippet">features</str>
1570+ <!-- produce summaries -->
1571+ <bool name="carrot.produceSummary">true</bool>
1572+ <!-- the maximum number of labels per cluster -->
1573+ <!--<int name="carrot.numDescriptions">5</int>-->
1574+ <!-- produce sub clusters -->
1575+ <bool name="carrot.outputSubClusters">false</bool>
1576+
1577+ <str name="defType">edismax</str>
1578+ <str name="qf">
1579+ content^0.5
1580+ </str>
1581+ <str name="q.alt">*:*</str>
1582+ <str name="rows">10</str>
1583+ <str name="fl">*,score</str>
1584+ </lst>
1585+ <arr name="last-components">
1586+ <str>clustering</str>
1587+ </arr>
1588+ </requestHandler>
1589+
1590+ <!-- Terms Component
1591+
1592+ http://wiki.apache.org/solr/TermsComponent
1593+
1594+ A component to return terms and document frequency of those
1595+ terms
1596+ -->
1597+ <searchComponent name="terms" class="solr.TermsComponent"/>
1598+
1599+ <!-- A request handler for demonstrating the terms component -->
1600+ <requestHandler name="/terms" class="solr.SearchHandler" startup="lazy">
1601+ <lst name="defaults">
1602+ <bool name="terms">true</bool>
1603+ <bool name="distrib">false</bool>
1604+ </lst>
1605+ <arr name="components">
1606+ <str>terms</str>
1607+ </arr>
1608+ </requestHandler>
1609+
1610+
1611+ <!-- Query Elevation Component
1612+
1613+ http://wiki.apache.org/solr/QueryElevationComponent
1614+
1615+ a search component that enables you to configure the top
1616+ results for a given query regardless of the normal lucene
1617+ scoring.
1618+ -->
1619+ <searchComponent name="elevator" class="solr.QueryElevationComponent" >
1620+ <!-- pick a fieldType to analyze queries -->
1621+ <str name="queryFieldType">string</str>
1622+ <str name="config-file">elevate.xml</str>
1623+ </searchComponent>
1624+
1625+ <!-- A request handler for demonstrating the elevator component -->
1626+ <requestHandler name="/elevate" class="solr.SearchHandler" startup="lazy">
1627+ <lst name="defaults">
1628+ <str name="echoParams">explicit</str>
1629+ <str name="df">content</str>
1630+ </lst>
1631+ <arr name="last-components">
1632+ <str>elevator</str>
1633+ </arr>
1634+ </requestHandler>
1635+
1636+ <!-- Highlighting Component
1637+
1638+ http://wiki.apache.org/solr/HighlightingParameters
1639+ -->
1640+ <searchComponent class="solr.HighlightComponent" name="highlight">
1641+ <highlighting>
1642+ <!-- Configure the standard fragmenter -->
1643+ <!-- This could most likely be commented out in the "default" case -->
1644+ <fragmenter name="gap"
1645+ default="true"
1646+ class="solr.highlight.GapFragmenter">
1647+ <lst name="defaults">
1648+ <int name="hl.fragsize">100</int>
1649+ </lst>
1650+ </fragmenter>
1651+
1652+ <!-- A regular-expression-based fragmenter
1653+ (for sentence extraction)
1654+ -->
1655+ <fragmenter name="regex"
1656+ class="solr.highlight.RegexFragmenter">
1657+ <lst name="defaults">
1658+ <!-- slightly smaller fragsizes work better because of slop -->
1659+ <int name="hl.fragsize">70</int>
1660+ <!-- allow 50% slop on fragment sizes -->
1661+ <float name="hl.regex.slop">0.5</float>
1662+ <!-- a basic sentence pattern -->
1663+ <str name="hl.regex.pattern">[-\w ,/\n\&quot;&apos;]{20,200}</str>
1664+ </lst>
1665+ </fragmenter>
1666+
1667+ <!-- Configure the standard formatter -->
1668+ <formatter name="html"
1669+ default="true"
1670+ class="solr.highlight.HtmlFormatter">
1671+ <lst name="defaults">
1672+ <str name="hl.simple.pre"><![CDATA[<em>]]></str>
1673+ <str name="hl.simple.post"><![CDATA[</em>]]></str>
1674+ </lst>
1675+ </formatter>
1676+
1677+ <!-- Configure the standard encoder -->
1678+ <encoder name="html"
1679+ class="solr.highlight.HtmlEncoder" />
1680+
1681+ <!-- Configure the standard fragListBuilder -->
1682+ <fragListBuilder name="simple"
1683+ class="solr.highlight.SimpleFragListBuilder"/>
1684+
1685+ <!-- Configure the single fragListBuilder -->
1686+ <fragListBuilder name="single"
1687+ class="solr.highlight.SingleFragListBuilder"/>
1688+
1689+ <!-- Configure the weighted fragListBuilder -->
1690+ <fragListBuilder name="weighted"
1691+ default="true"
1692+ class="solr.highlight.WeightedFragListBuilder"/>
1693+
1694+ <!-- default tag FragmentsBuilder -->
1695+ <fragmentsBuilder name="default"
1696+ default="true"
1697+ class="solr.highlight.ScoreOrderFragmentsBuilder">
1698+ <!--
1699+ <lst name="defaults">
1700+ <str name="hl.multiValuedSeparatorChar">/</str>
1701+ </lst>
1702+ -->
1703+ </fragmentsBuilder>
1704+
1705+ <!-- multi-colored tag FragmentsBuilder -->
1706+ <fragmentsBuilder name="colored"
1707+ class="solr.highlight.ScoreOrderFragmentsBuilder">
1708+ <lst name="defaults">
1709+ <str name="hl.tag.pre"><![CDATA[
1710+ <b style="background:yellow">,<b style="background:lawgreen">,
1711+ <b style="background:aquamarine">,<b style="background:magenta">,
1712+ <b style="background:palegreen">,<b style="background:coral">,
1713+ <b style="background:wheat">,<b style="background:khaki">,
1714+ <b style="background:lime">,<b style="background:deepskyblue">]]></str>
1715+ <str name="hl.tag.post"><![CDATA[</b>]]></str>
1716+ </lst>
1717+ </fragmentsBuilder>
1718+
1719+ <boundaryScanner name="default"
1720+ default="true"
1721+ class="solr.highlight.SimpleBoundaryScanner">
1722+ <lst name="defaults">
1723+ <str name="hl.bs.maxScan">10</str>
1724+ <str name="hl.bs.chars">.,!? &#9;&#10;&#13;</str>
1725+ </lst>
1726+ </boundaryScanner>
1727+
1728+ <boundaryScanner name="breakIterator"
1729+ class="solr.highlight.BreakIteratorBoundaryScanner">
1730+ <lst name="defaults">
1731+ <!-- type should be one of CHARACTER, WORD(default), LINE and SENTENCE -->
1732+ <str name="hl.bs.type">WORD</str>
1733+ <!-- language and country are used when constructing Locale object. -->
1734+ <!-- And the Locale object will be used when getting instance of BreakIterator -->
1735+ <str name="hl.bs.language">en</str>
1736+ <str name="hl.bs.country">US</str>
1737+ </lst>
1738+ </boundaryScanner>
1739+ </highlighting>
1740+ </searchComponent>
1741+
1742+ <!-- Update Processors
1743+
1744+ Chains of Update Processor Factories for dealing with Update
1745+ Requests can be declared, and then used by name in Update
1746+ Request Processors
1747+
1748+ http://wiki.apache.org/solr/UpdateRequestProcessor
1749+
1750+ -->
1751+ <!-- Deduplication
1752+
1753+ An example dedup update processor that creates the "id" field
1754+ on the fly based on the hash code of some other fields. This
1755+ example has overwriteDupes set to false since we are using the
1756+ id field as the signatureField and Solr will maintain
1757+ uniqueness based on that anyway.
1758+
1759+ -->
1760+ <!--
1761+ <updateRequestProcessorChain name="dedupe">
1762+ <processor class="solr.processor.SignatureUpdateProcessorFactory">
1763+ <bool name="enabled">true</bool>
1764+ <str name="signatureField">id</str>
1765+ <bool name="overwriteDupes">false</bool>
1766+ <str name="fields">name,features,cat</str>
1767+ <str name="signatureClass">solr.processor.Lookup3Signature</str>
1768+ </processor>
1769+ <processor class="solr.LogUpdateProcessorFactory" />
1770+ <processor class="solr.RunUpdateProcessorFactory" />
1771+ </updateRequestProcessorChain>
1772+ -->
1773+
1774+ <!-- Language identification
1775+
1776+ This example update chain identifies the language of the incoming
1777+ documents using the langid contrib. The detected language is
1778+ written to field language_s. No field name mapping is done.
1779+ The fields used for detection are text, title, subject and description,
1780+ making this example suitable for detecting languages form full-text
1781+ rich documents injected via ExtractingRequestHandler.
1782+ See more about langId at http://wiki.apache.org/solr/LanguageDetection
1783+ -->
1784+ <!--
1785+ <updateRequestProcessorChain name="langid">
1786+ <processor class="org.apache.solr.update.processor.TikaLanguageIdentifierUpdateProcessorFactory">
1787+ <str name="langid.fl">text,title,subject,description</str>
1788+ <str name="langid.langField">language_s</str>
1789+ <str name="langid.fallback">en</str>
1790+ </processor>
1791+ <processor class="solr.LogUpdateProcessorFactory" />
1792+ <processor class="solr.RunUpdateProcessorFactory" />
1793+ </updateRequestProcessorChain>
1794+ -->
1795+ <updateRequestProcessorChain name="langid">
1796+ <processor class="org.apache.solr.update.processor.LangDetectLanguageIdentifierUpdateProcessorFactory">
1797+ <str name="langid.fl">content</str>
1798+ <str name="langid.langField">solrlang_s</str>
1799+ <str name="langid.whitelist">ar,bg,ca,cz,da,de,el,es,eu,fa,fi,fr,ga,gl,hi,hu,hy,id,it,ja,lv,ko,nl,no,pt,ro,ru,sv,th,tr,zh,zh_CN,zh_TW</str>
1800+ <bool name="langid.map">true</bool>
1801+ <bool name="langid.map.keepOrig">true</bool>
1802+ <str name="langid.map.lcmap">zh:cjk zh_CN:cjk zh_TW:cjk ko:cjk</str>
1803+ <!-- If you want to run on English environment, replace with en -->
1804+ <str name="langid.fallback">ja</str>
1805+ </processor>
1806+ <processor class="solr.LogUpdateProcessorFactory" />
1807+ <processor class="solr.RunUpdateProcessorFactory" />
1808+ </updateRequestProcessorChain>
1809+
1810+ <!-- Script update processor
1811+
1812+ This example hooks in an update processor implemented using JavaScript.
1813+
1814+ See more about the script update processor at http://wiki.apache.org/solr/ScriptUpdateProcessor
1815+ -->
1816+ <!--
1817+ <updateRequestProcessorChain name="script">
1818+ <processor class="solr.StatelessScriptUpdateProcessorFactory">
1819+ <str name="script">update-script.js</str>
1820+ <lst name="params">
1821+ <str name="config_param">example config parameter</str>
1822+ </lst>
1823+ </processor>
1824+ <processor class="solr.RunUpdateProcessorFactory" />
1825+ </updateRequestProcessorChain>
1826+ -->
1827+
1828+ <!-- Response Writers
1829+
1830+ http://wiki.apache.org/solr/QueryResponseWriter
1831+
1832+ Request responses will be written using the writer specified by
1833+ the 'wt' request parameter matching the name of a registered
1834+ writer.
1835+
1836+ The "default" writer is the default and will be used if 'wt' is
1837+ not specified in the request.
1838+ -->
1839+ <!-- The following response writers are implicitly configured unless
1840+ overridden...
1841+ -->
1842+ <!--
1843+ <queryResponseWriter name="xml"
1844+ default="true"
1845+ class="solr.XMLResponseWriter" />
1846+ <queryResponseWriter name="json" class="solr.JSONResponseWriter"/>
1847+ <queryResponseWriter name="python" class="solr.PythonResponseWriter"/>
1848+ <queryResponseWriter name="ruby" class="solr.RubyResponseWriter"/>
1849+ <queryResponseWriter name="php" class="solr.PHPResponseWriter"/>
1850+ <queryResponseWriter name="phps" class="solr.PHPSerializedResponseWriter"/>
1851+ <queryResponseWriter name="csv" class="solr.CSVResponseWriter"/>
1852+ <queryResponseWriter name="schema.xml" class="solr.SchemaXmlResponseWriter"/>
1853+ -->
1854+
1855+ <queryResponseWriter name="json" class="solr.JSONResponseWriter">
1856+ <!-- For the purposes of the tutorial, JSON responses are written as
1857+ plain text so that they are easy to read in *any* browser.
1858+ If you expect a MIME type of "application/json" just remove this override.
1859+ -->
1860+ <str name="content-type">text/plain; charset=UTF-8</str>
1861+ </queryResponseWriter>
1862+
1863+ <!--
1864+ Custom response writers can be declared as needed...
1865+ -->
1866+ <queryResponseWriter name="velocity" class="solr.VelocityResponseWriter" startup="lazy"/>
1867+
1868+
1869+ <!-- XSLT response writer transforms the XML output by any xslt file found
1870+ in Solr's conf/xslt directory. Changes to xslt files are checked for
1871+ every xsltCacheLifetimeSeconds.
1872+ -->
1873+ <queryResponseWriter name="xslt" class="solr.XSLTResponseWriter">
1874+ <int name="xsltCacheLifetimeSeconds">5</int>
1875+ </queryResponseWriter>
1876+
1877+ <!-- Query Parsers
1878+
1879+ http://wiki.apache.org/solr/SolrQuerySyntax
1880+
1881+ Multiple QParserPlugins can be registered by name, and then
1882+ used in either the "defType" param for the QueryComponent (used
1883+ by SearchHandler) or in LocalParams
1884+ -->
1885+ <!-- example of registering a query parser -->
1886+ <!--
1887+ <queryParser name="myparser" class="com.mycompany.MyQParserPlugin"/>
1888+ -->
1889+
1890+ <!-- Function Parsers
1891+
1892+ http://wiki.apache.org/solr/FunctionQuery
1893+
1894+ Multiple ValueSourceParsers can be registered by name, and then
1895+ used as function names when using the "func" QParser.
1896+ -->
1897+ <!-- example of registering a custom function parser -->
1898+ <!--
1899+ <valueSourceParser name="myfunc"
1900+ class="com.mycompany.MyValueSourceParser" />
1901+ -->
1902+ <valueSourceParser name="wordfreq"
1903+ class="jp.sf.fess.solr.plugin.search.WordFreqValueSourceParser" />
1904+
1905+
1906+ <!-- Document Transformers
1907+ http://wiki.apache.org/solr/DocTransformers
1908+ -->
1909+ <!--
1910+ Could be something like:
1911+ <transformer name="db" class="com.mycompany.LoadFromDatabaseTransformer" >
1912+ <int name="connection">jdbc://....</int>
1913+ </transformer>
1914+
1915+ To add a constant value to all docs, use:
1916+ <transformer name="mytrans2" class="org.apache.solr.response.transform.ValueAugmenterFactory" >
1917+ <int name="value">5</int>
1918+ </transformer>
1919+
1920+ If you want the user to still be able to change it with _value:something_ use this:
1921+ <transformer name="mytrans3" class="org.apache.solr.response.transform.ValueAugmenterFactory" >
1922+ <double name="defaultValue">5</double>
1923+ </transformer>
1924+
1925+ If you are using the QueryElevationComponent, you may wish to mark documents that get boosted. The
1926+ EditorialMarkerFactory will do exactly that:
1927+ <transformer name="qecBooster" class="org.apache.solr.response.transform.EditorialMarkerFactory" />
1928+ -->
1929+
1930+
1931+ <!-- Legacy config for the admin interface -->
1932+ <admin>
1933+ <defaultQuery>*:*</defaultQuery>
1934+ </admin>
1935+
1936+</config>
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
--- fess-server/tags/fess-server-8.2.0/src/tomcat/solr/solr.xml (revision 0)
+++ fess-server/tags/fess-server-8.2.0/src/tomcat/solr/solr.xml (revision 1802)
@@ -0,0 +1,44 @@
1+<?xml version="1.0" encoding="UTF-8" ?>
2+<!--
3+ Licensed to the Apache Software Foundation (ASF) under one or more
4+ contributor license agreements. See the NOTICE file distributed with
5+ this work for additional information regarding copyright ownership.
6+ The ASF licenses this file to You under the Apache License, Version 2.0
7+ (the "License"); you may not use this file except in compliance with
8+ the License. You may obtain a copy of the License at
9+
10+ http://www.apache.org/licenses/LICENSE-2.0
11+
12+ Unless required by applicable law or agreed to in writing, software
13+ distributed under the License is distributed on an "AS IS" BASIS,
14+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15+ See the License for the specific language governing permissions and
16+ limitations under the License.
17+-->
18+
19+<!--
20+ This is an example of a simple "solr.xml" file for configuring one or
21+ more Solr Cores, as well as allowing Cores to be added, removed, and
22+ reloaded via HTTP requests.
23+
24+ More information about options available in this configuration file,
25+ and Solr Core administration can be found online:
26+ http://wiki.apache.org/solr/CoreAdmin
27+-->
28+
29+<solr>
30+
31+<!--
32+ <solrcloud>
33+ <int name="zkClientTimeout">${zkClientTimeout:15000}</int>
34+ <bool name="genericCoreNodeNames">${genericCoreNodeNames:true}</bool>
35+ </solrcloud>
36+-->
37+
38+ <shardHandlerFactory name="shardHandlerFactory"
39+ class="HttpShardHandlerFactory">
40+ <int name="socketTimeout">${socketTimeout:0}</int>
41+ <int name="connTimeout">${connTimeout:0}</int>
42+ </shardHandlerFactory>
43+
44+</solr>
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
--- fess-server/tags/fess-server-8.2.0/src/tomcat/webapps/solr/WEB-INF/web.xml (revision 0)
+++ fess-server/tags/fess-server-8.2.0/src/tomcat/webapps/solr/WEB-INF/web.xml (revision 1802)
@@ -0,0 +1,189 @@
1+<?xml version="1.0" encoding="UTF-8"?>
2+<!--
3+ Licensed to the Apache Software Foundation (ASF) under one or more
4+ contributor license agreements. See the NOTICE file distributed with
5+ this work for additional information regarding copyright ownership.
6+ The ASF licenses this file to You under the Apache License, Version 2.0
7+ (the "License"); you may not use this file except in compliance with
8+ the License. You may obtain a copy of the License at
9+
10+ http://www.apache.org/licenses/LICENSE-2.0
11+
12+ Unless required by applicable law or agreed to in writing, software
13+ distributed under the License is distributed on an "AS IS" BASIS,
14+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15+ See the License for the specific language governing permissions and
16+ limitations under the License.
17+-->
18+<web-app xmlns="http://java.sun.com/xml/ns/javaee"
19+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
20+ xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
21+ version="2.5"
22+ metadata-complete="true"
23+>
24+
25+
26+ <!-- Uncomment if you are trying to use a Resin version before 3.0.19.
27+ Their XML implementation isn't entirely compatible with Xerces.
28+ Below are the implementations to use with Sun's JVM.
29+ <system-property javax.xml.xpath.XPathFactory=
30+ "com.sun.org.apache.xpath.internal.jaxp.XPathFactoryImpl"/>
31+ <system-property javax.xml.parsers.DocumentBuilderFactory=
32+ "com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl"/>
33+ <system-property javax.xml.parsers.SAXParserFactory=
34+ "com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl"/>
35+ -->
36+
37+ <!-- People who want to hardcode their "Solr Home" directly into the
38+ WAR File can set the JNDI property here...
39+ -->
40+ <!--
41+ <env-entry>
42+ <env-entry-name>solr/home</env-entry-name>
43+ <env-entry-value>/put/your/solr/home/here</env-entry-value>
44+ <env-entry-type>java.lang.String</env-entry-type>
45+ </env-entry>
46+ -->
47+
48+ <!-- Any path (name) registered in solrconfig.xml will be sent to that filter -->
49+ <filter>
50+ <filter-name>SolrRequestFilter</filter-name>
51+ <filter-class>org.apache.solr.servlet.SolrDispatchFilter</filter-class>
52+ <!-- If you are wiring Solr into a larger web application which controls
53+ the web context root, you will probably want to mount Solr under
54+ a path prefix (app.war with /app/solr mounted into it, for example).
55+ You will need to put this prefix in front of the SolrDispatchFilter
56+ url-pattern mapping too (/solr/*), and also on any paths for
57+ legacy Solr servlet mappings you may be using.
58+ For the Admin UI to work properly in a path-prefixed configuration,
59+ the admin folder containing the resources needs to be under the app context root
60+ named to match the path-prefix. For example:
61+
62+ .war
63+ xxx
64+ js
65+ main.js
66+ -->
67+ <!--
68+ <init-param>
69+ <param-name>path-prefix</param-name>
70+ <param-value>/xxx</param-value>
71+ </init-param>
72+ -->
73+ </filter>
74+
75+ <filter-mapping>
76+ <!--
77+ NOTE: When using multicore, /admin JSP URLs with a core specified
78+ such as /solr/coreName/admin/stats.jsp get forwarded by a
79+ RequestDispatcher to /solr/admin/stats.jsp with the specified core
80+ put into request scope keyed as "org.apache.solr.SolrCore".
81+
82+ It is unnecessary, and potentially problematic, to have the SolrDispatchFilter
83+ configured to also filter on forwards. Do not configure
84+ this dispatcher as <dispatcher>FORWARD</dispatcher>.
85+ -->
86+ <filter-name>SolrRequestFilter</filter-name>
87+ <url-pattern>/*</url-pattern>
88+ </filter-mapping>
89+
90+ <servlet>
91+ <servlet-name>Zookeeper</servlet-name>
92+ <servlet-class>org.apache.solr.servlet.ZookeeperInfoServlet</servlet-class>
93+ </servlet>
94+
95+ <servlet>
96+ <servlet-name>LoadAdminUI</servlet-name>
97+ <servlet-class>org.apache.solr.servlet.LoadAdminUiServlet</servlet-class>
98+ </servlet>
99+
100+ <!-- Remove in Solr 5.0 -->
101+ <!-- This sends SC_MOVED_PERMANENTLY (301) for resources that changed in 4.0 -->
102+ <servlet>
103+ <servlet-name>RedirectOldAdminUI</servlet-name>
104+ <servlet-class>org.apache.solr.servlet.RedirectServlet</servlet-class>
105+ <init-param>
106+ <param-name>destination</param-name>
107+ <param-value>${context}/#/</param-value>
108+ </init-param>
109+ </servlet>
110+
111+ <servlet>
112+ <servlet-name>RedirectOldZookeeper</servlet-name>
113+ <servlet-class>org.apache.solr.servlet.RedirectServlet</servlet-class>
114+ <init-param>
115+ <param-name>destination</param-name>
116+ <param-value>${context}/zookeeper</param-value>
117+ </init-param>
118+ </servlet>
119+
120+ <servlet>
121+ <servlet-name>RedirectLogging</servlet-name>
122+ <servlet-class>org.apache.solr.servlet.RedirectServlet</servlet-class>
123+ <init-param>
124+ <param-name>destination</param-name>
125+ <param-value>${context}/#/~logging</param-value>
126+ </init-param>
127+ </servlet>
128+
129+ <servlet-mapping>
130+ <servlet-name>RedirectOldAdminUI</servlet-name>
131+ <url-pattern>/admin/</url-pattern>
132+ </servlet-mapping>
133+ <servlet-mapping>
134+ <servlet-name>RedirectOldAdminUI</servlet-name>
135+ <url-pattern>/admin</url-pattern>
136+ </servlet-mapping>
137+ <servlet-mapping>
138+ <servlet-name>RedirectOldZookeeper</servlet-name>
139+ <url-pattern>/zookeeper.jsp</url-pattern>
140+ </servlet-mapping>
141+ <servlet-mapping>
142+ <servlet-name>RedirectLogging</servlet-name>
143+ <url-pattern>/logging</url-pattern>
144+ </servlet-mapping>
145+
146+ <!-- Servlet Mapping -->
147+ <servlet-mapping>
148+ <servlet-name>Zookeeper</servlet-name>
149+ <url-pattern>/zookeeper</url-pattern>
150+ </servlet-mapping>
151+
152+ <servlet-mapping>
153+ <servlet-name>LoadAdminUI</servlet-name>
154+ <url-pattern>/admin.html</url-pattern>
155+ </servlet-mapping>
156+
157+ <mime-mapping>
158+ <extension>.xsl</extension>
159+ <!-- per http://www.w3.org/TR/2006/PR-xslt20-20061121/ -->
160+ <mime-type>application/xslt+xml</mime-type>
161+ </mime-mapping>
162+
163+ <welcome-file-list>
164+ <welcome-file>admin.html</welcome-file>
165+ </welcome-file-list>
166+
167+ <security-constraint>
168+ <web-resource-collection>
169+ <web-resource-name>Protected Solr</web-resource-name>
170+ <url-pattern>/*</url-pattern>
171+ <http-method>GET</http-method>
172+ <http-method>POST</http-method>
173+ </web-resource-collection>
174+ <auth-constraint>
175+ <role-name>solr</role-name>
176+ </auth-constraint>
177+ </security-constraint>
178+
179+ <login-config>
180+ <auth-method>BASIC</auth-method>
181+ <realm-name>Basic Authentication</realm-name>
182+ </login-config>
183+
184+ <security-role>
185+ <description>Role for Accessing Solr</description>
186+ <role-name>solr</role-name>
187+ </security-role>
188+
189+</web-app>
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
--- fess-server/tags/fess-server-8.2.0/src/tomcat/conf/server.xml (revision 0)
+++ fess-server/tags/fess-server-8.2.0/src/tomcat/conf/server.xml (revision 1802)
@@ -0,0 +1,142 @@
1+<?xml version='1.0' encoding='utf-8'?>
2+<!--
3+ Licensed to the Apache Software Foundation (ASF) under one or more
4+ contributor license agreements. See the NOTICE file distributed with
5+ this work for additional information regarding copyright ownership.
6+ The ASF licenses this file to You under the Apache License, Version 2.0
7+ (the "License"); you may not use this file except in compliance with
8+ the License. You may obtain a copy of the License at
9+
10+ http://www.apache.org/licenses/LICENSE-2.0
11+
12+ Unless required by applicable law or agreed to in writing, software
13+ distributed under the License is distributed on an "AS IS" BASIS,
14+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15+ See the License for the specific language governing permissions and
16+ limitations under the License.
17+-->
18+<!-- Note: A "Server" is not itself a "Container", so you may not
19+ define subcomponents such as "Valves" at this level.
20+ Documentation at /docs/config/server.html
21+ -->
22+<Server port="8005" shutdown="SHUTDOWN">
23+ <!-- Security listener. Documentation at /docs/config/listeners.html
24+ <Listener className="org.apache.catalina.security.SecurityListener" />
25+ -->
26+ <!--APR library loader. Documentation at /docs/apr.html -->
27+ <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
28+ <!--Initialize Jasper prior to webapps are loaded. Documentation at /docs/jasper-howto.html -->
29+ <Listener className="org.apache.catalina.core.JasperListener" />
30+ <!-- Prevent memory leaks due to use of particular java/javax APIs-->
31+ <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
32+ <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
33+ <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
34+
35+ <!-- Global JNDI resources
36+ Documentation at /docs/jndi-resources-howto.html
37+ -->
38+ <GlobalNamingResources>
39+ <!-- Editable user database that can also be used by
40+ UserDatabaseRealm to authenticate users
41+ -->
42+ <Resource name="UserDatabase" auth="Container"
43+ type="org.apache.catalina.UserDatabase"
44+ description="User database that can be updated and saved"
45+ factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
46+ pathname="conf/tomcat-users.xml" />
47+ </GlobalNamingResources>
48+
49+ <!-- A "Service" is a collection of one or more "Connectors" that share
50+ a single "Container" Note: A "Service" is not itself a "Container",
51+ so you may not define subcomponents such as "Valves" at this level.
52+ Documentation at /docs/config/service.html
53+ -->
54+ <Service name="Catalina">
55+
56+ <!--The connectors can use a shared executor, you can define one or more named thread pools-->
57+ <!--
58+ <Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
59+ maxThreads="150" minSpareThreads="4"/>
60+ -->
61+
62+
63+ <!-- A "Connector" represents an endpoint by which requests are received
64+ and responses are returned. Documentation at :
65+ Java HTTP Connector: /docs/config/http.html (blocking & non-blocking)
66+ Java AJP Connector: /docs/config/ajp.html
67+ APR (HTTP/AJP) Connector: /docs/apr.html
68+ Define a non-SSL HTTP/1.1 Connector on port 8080
69+ -->
70+ <Connector port="8080" protocol="HTTP/1.1"
71+ connectionTimeout="20000"
72+ redirectPort="8443" URIEncoding="UTF-8" />
73+ <!-- A "Connector" using the shared thread pool-->
74+ <!--
75+ <Connector executor="tomcatThreadPool"
76+ port="8080" protocol="HTTP/1.1"
77+ connectionTimeout="20000"
78+ redirectPort="8443" />
79+ -->
80+ <!-- Define a SSL HTTP/1.1 Connector on port 8443
81+ This connector uses the JSSE configuration, when using APR, the
82+ connector should be using the OpenSSL style configuration
83+ described in the APR documentation -->
84+ <!--
85+ <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
86+ maxThreads="150" scheme="https" secure="true"
87+ clientAuth="false" sslProtocol="TLS" />
88+ -->
89+
90+ <!-- Define an AJP 1.3 Connector on port 8009 -->
91+ <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" URIEncoding="UTF-8" />
92+
93+
94+ <!-- An Engine represents the entry point (within Catalina) that processes
95+ every request. The Engine implementation for Tomcat stand alone
96+ analyzes the HTTP headers included with the request, and passes them
97+ on to the appropriate Host (virtual host).
98+ Documentation at /docs/config/engine.html -->
99+
100+ <!-- You should set jvmRoute to support load-balancing via AJP ie :
101+ <Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">
102+ -->
103+ <Engine name="Catalina" defaultHost="localhost">
104+
105+ <!--For clustering, please take a look at documentation at:
106+ /docs/cluster-howto.html (simple how to)
107+ /docs/config/cluster.html (reference documentation) -->
108+ <!--
109+ <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
110+ -->
111+
112+ <!-- Use the LockOutRealm to prevent attempts to guess user passwords
113+ via a brute-force attack -->
114+ <Realm className="org.apache.catalina.realm.LockOutRealm">
115+ <!-- This Realm uses the UserDatabase configured in the global JNDI
116+ resources under the key "UserDatabase". Any edits
117+ that are performed against this UserDatabase are immediately
118+ available for use by the Realm. -->
119+ <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
120+ resourceName="UserDatabase"/>
121+ </Realm>
122+
123+ <Host name="localhost" appBase="webapps"
124+ unpackWARs="true" autoDeploy="true">
125+
126+ <!-- SingleSignOn valve, share authentication between web applications
127+ Documentation at: /docs/config/valve.html -->
128+ <!--
129+ <Valve className="org.apache.catalina.authenticator.SingleSignOn" />
130+ -->
131+
132+ <!-- Access log processes all example.
133+ Documentation at: /docs/config/valve.html
134+ Note: The pattern used is equivalent to using pattern="common" -->
135+ <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
136+ prefix="localhost_access_log." suffix=".txt"
137+ pattern="%h %l %u %t &quot;%r&quot; %s %b" resolveHosts="false"/>
138+
139+ </Host>
140+ </Engine>
141+ </Service>
142+</Server>
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
--- fess-server/tags/fess-server-8.2.0/src/tomcat/conf/tomcat-users.xml (revision 0)
+++ fess-server/tags/fess-server-8.2.0/src/tomcat/conf/tomcat-users.xml (revision 1802)
@@ -0,0 +1,32 @@
1+<?xml version='1.0' encoding='utf-8'?>
2+<!--
3+ Licensed to the Apache Software Foundation (ASF) under one or more
4+ contributor license agreements. See the NOTICE file distributed with
5+ this work for additional information regarding copyright ownership.
6+ The ASF licenses this file to You under the Apache License, Version 2.0
7+ (the "License"); you may not use this file except in compliance with
8+ the License. You may obtain a copy of the License at
9+
10+ http://www.apache.org/licenses/LICENSE-2.0
11+
12+ Unless required by applicable law or agreed to in writing, software
13+ distributed under the License is distributed on an "AS IS" BASIS,
14+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15+ See the License for the specific language governing permissions and
16+ limitations under the License.
17+-->
18+<tomcat-users>
19+ <role rolename="fess"/>
20+ <role rolename="solr"/>
21+ <role rolename="manager-script"/>
22+ <user username="admin" password="admin" roles="fess"/>
23+ <user username="solradmin" password="solradmin" roles="solr"/>
24+ <user username="manager" password="manager" roles="manager-script"/>
25+<!--
26+ <role rolename="tomcat"/>
27+ <role rolename="role1"/>
28+ <user username="tomcat" password="tomcat" roles="tomcat"/>
29+ <user username="both" password="tomcat" roles="tomcat,role1"/>
30+ <user username="role1" password="tomcat" roles="role1"/>
31+-->
32+</tomcat-users>
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
--- fess-server/tags/fess-server-8.2.0/src/tomcat/bin/setenv.sh (revision 0)
+++ fess-server/tags/fess-server-8.2.0/src/tomcat/bin/setenv.sh (revision 1802)
@@ -0,0 +1,11 @@
1+#!/bin/sh
2+
3+export JAVA_OPTS="$JAVA_OPTS -Dsolr.solr.home=$CATALINA_HOME/solr -Dfess.solr.data.dir=$CATALINA_HOME/solr/core1/data -Dfess.log.file=$CATALINA_HOME/webapps/fess/WEB-INF/logs/fess.out -Djava.awt.headless=true -server -Xmx1g -XX:MaxPermSize=128m -XX:-UseGCOverheadLimit -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=75 -XX:+CMSIncrementalMode -XX:+CMSIncrementalPacing -XX:CMSIncrementalDutyCycleMin=0 -XX:+UseParNewGC -XX:+UseStringCache -XX:+UseTLAB -XX:+DisableExplicitGC"
4+# -XX:+UseCompressedOops for 64bit OS
5+# -XX:+UseCompressedStrings if java6u20 or above
6+# -XX:+OptimizeStringConcat if java6u21 or above
7+
8+# if Java heap size is over 32GB heap, remove -XX:+UseCompressedOops
9+# if your machine has 2 or more cpu, enabled -XX:+CMSParallelRemarkEnabled by -XX:+UseConcMarkSweepGC
10+
11+export CATALINA_OUT=/dev/null
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
--- fess-server/tags/fess-server-8.2.0/src/tomcat/bin/service.bat (revision 0)
+++ fess-server/tags/fess-server-8.2.0/src/tomcat/bin/service.bat (revision 1802)
@@ -0,0 +1,166 @@
1+@echo off
2+rem Licensed to the Apache Software Foundation (ASF) under one or more
3+rem contributor license agreements. See the NOTICE file distributed with
4+rem this work for additional information regarding copyright ownership.
5+rem The ASF licenses this file to You under the Apache License, Version 2.0
6+rem (the "License"); you may not use this file except in compliance with
7+rem the License. You may obtain a copy of the License at
8+rem
9+rem http://www.apache.org/licenses/LICENSE-2.0
10+rem
11+rem Unless required by applicable law or agreed to in writing, software
12+rem distributed under the License is distributed on an "AS IS" BASIS,
13+rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14+rem See the License for the specific language governing permissions and
15+rem limitations under the License.
16+
17+if "%OS%" == "Windows_NT" setlocal
18+rem ---------------------------------------------------------------------------
19+rem NT Service Install/Uninstall script
20+rem
21+rem Options
22+rem install Install the service using Tomcat7 as service name.
23+rem Service is installed using default settings.
24+rem remove Remove the service from the System.
25+rem
26+rem name (optional) If the second argument is present it is considered
27+rem to be new service name
28+rem
29+rem $Id: service.bat 1000718 2010-09-24 06:00:00Z mturk $
30+rem ---------------------------------------------------------------------------
31+
32+set "SELF=%~dp0%service.bat"
33+rem Guess CATALINA_HOME if not defined
34+set "CURRENT_DIR=%cd%"
35+if not "%CATALINA_HOME%" == "" goto gotHome
36+set "CATALINA_HOME=%cd%"
37+if exist "%CATALINA_HOME%\bin\tomcat7.exe" goto okHome
38+rem CD to the upper dir
39+cd ..
40+set "CATALINA_HOME=%cd%"
41+:gotHome
42+if exist "%CATALINA_HOME%\bin\tomcat7.exe" goto okHome
43+echo The tomcat.exe was not found...
44+echo The CATALINA_HOME environment variable is not defined correctly.
45+echo This environment variable is needed to run this program
46+goto end
47+:okHome
48+rem Make sure prerequisite environment variables are set
49+if not "%JAVA_HOME%" == "" goto gotJdkHome
50+if not "%JRE_HOME%" == "" goto gotJreHome
51+echo Neither the JAVA_HOME nor the JRE_HOME environment variable is defined
52+echo Service will try to guess them from the registry.
53+goto okJavaHome
54+:gotJreHome
55+if not exist "%JRE_HOME%\bin\java.exe" goto noJavaHome
56+if not exist "%JRE_HOME%\bin\javaw.exe" goto noJavaHome
57+goto okJavaHome
58+:gotJdkHome
59+if not exist "%JAVA_HOME%\jre\bin\java.exe" goto noJavaHome
60+if not exist "%JAVA_HOME%\jre\bin\javaw.exe" goto noJavaHome
61+if not exist "%JAVA_HOME%\bin\javac.exe" goto noJavaHome
62+if not "%JRE_HOME%" == "" goto okJavaHome
63+set "JRE_HOME=%JAVA_HOME%\jre"
64+goto okJavaHome
65+:noJavaHome
66+echo The JAVA_HOME environment variable is not defined correctly
67+echo This environment variable is needed to run this program
68+echo NB: JAVA_HOME should point to a JDK not a JRE
69+goto end
70+:okJavaHome
71+if not "%CATALINA_BASE%" == "" goto gotBase
72+set "CATALINA_BASE=%CATALINA_HOME%"
73+:gotBase
74+
75+set "EXECUTABLE=%CATALINA_HOME%\bin\tomcat7.exe"
76+
77+rem Set default Service name
78+set SERVICE_NAME=Tomcat7
79+set PR_DISPLAYNAME=Apache Tomcat 7
80+
81+if "x%1x" == "xx" goto displayUsage
82+set SERVICE_CMD=%1
83+shift
84+if "x%1x" == "xx" goto checkServiceCmd
85+:checkUser
86+if "x%1x" == "x/userx" goto runAsUser
87+if "x%1x" == "x--userx" goto runAsUser
88+set SERVICE_NAME=%1
89+set PR_DISPLAYNAME=Apache Tomcat %1
90+shift
91+if "x%1x" == "xx" goto checkServiceCmd
92+goto checkUser
93+:runAsUser
94+shift
95+if "x%1x" == "xx" goto displayUsage
96+set SERVICE_USER=%1
97+shift
98+runas /env /savecred /user:%SERVICE_USER% "%COMSPEC% /K \"%SELF%\" %SERVICE_CMD% %SERVICE_NAME%"
99+goto end
100+:checkServiceCmd
101+if /i %SERVICE_CMD% == install goto doInstall
102+if /i %SERVICE_CMD% == remove goto doRemove
103+if /i %SERVICE_CMD% == uninstall goto doRemove
104+echo Unknown parameter "%1"
105+:displayUsage
106+echo.
107+echo Usage: service.bat install/remove [service_name] [/user username]
108+goto end
109+
110+:doRemove
111+rem Remove the service
112+"%EXECUTABLE%" //DS//%SERVICE_NAME%
113+if not errorlevel 1 goto removed
114+echo Failed removing '%SERVICE_NAME%' service
115+goto end
116+:removed
117+echo The service '%SERVICE_NAME%' has been removed
118+goto end
119+
120+:doInstall
121+rem Install the service
122+echo Installing the service '%SERVICE_NAME%' ...
123+echo Using CATALINA_HOME: "%CATALINA_HOME%"
124+echo Using CATALINA_BASE: "%CATALINA_BASE%"
125+echo Using JAVA_HOME: "%JAVA_HOME%"
126+echo Using JRE_HOME: "%JRE_HOME%"
127+
128+rem Use the environment variables as an example
129+rem Each command line option is prefixed with PR_
130+
131+set PR_DESCRIPTION=Apache Tomcat 7.0.27 Server - http://tomcat.apache.org/
132+set "PR_INSTALL=%EXECUTABLE%"
133+set "PR_LOGPATH=%CATALINA_BASE%\logs"
134+set "PR_CLASSPATH=%CATALINA_HOME%\bin\bootstrap.jar;%CATALINA_BASE%\bin\tomcat-juli.jar;%CATALINA_HOME%\bin\tomcat-juli.jar"
135+rem Set the server jvm from JAVA_HOME
136+set "PR_JVM=%JRE_HOME%\bin\server\jvm.dll"
137+if exist "%PR_JVM%" goto foundJvm
138+rem Set the client jvm from JAVA_HOME
139+set "PR_JVM=%JRE_HOME%\bin\client\jvm.dll"
140+if exist "%PR_JVM%" goto foundJvm
141+set PR_JVM=auto
142+:foundJvm
143+echo Using JVM: "%PR_JVM%"
144+"%EXECUTABLE%" //IS//%SERVICE_NAME% --StartClass org.apache.catalina.startup.Bootstrap --StopClass org.apache.catalina.startup.Bootstrap --StartParams start --StopParams stop
145+if not errorlevel 1 goto installed
146+echo Failed installing '%SERVICE_NAME%' service
147+goto end
148+:installed
149+rem Clear the environment variables. They are not needed any more.
150+set PR_DISPLAYNAME=
151+set PR_DESCRIPTION=
152+set PR_INSTALL=
153+set PR_LOGPATH=
154+set PR_CLASSPATH=
155+set PR_JVM=
156+rem Set extra parameters
157+"%EXECUTABLE%" //US//%SERVICE_NAME% --JvmOptions "-Dcatalina.base=%CATALINA_BASE%;-Dcatalina.home=%CATALINA_HOME%;-Djava.endorsed.dirs=%CATALINA_HOME%\endorsed" --StartMode jvm --StopMode jvm
158+rem More extra parameters
159+set "PR_LOGPATH=%CATALINA_BASE%\logs"
160+set PR_STDOUTPUT=auto
161+set PR_STDERROR=auto
162+"%EXECUTABLE%" //US//%SERVICE_NAME% ++JvmOptions "-Djava.io.tmpdir=%CATALINA_BASE%\temp;-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager;-Djava.util.logging.config.file=%CATALINA_BASE%\conf\logging.properties;-Dsolr.solr.home=%CATALINA_HOME%\solr;-Dsolr.data.dir=%CATALINA_HOME%\solr\core1\data;-Dfess.log.file=%CATALINA_HOME%\webapps\fess\WEB-INF\logs\fess.out;-Djava.awt.headless=true;-XX:+UseGCOverheadLimit;-XX:+UseConcMarkSweepGC;-XX:+CMSIncrementalMode;-XX:+UseTLAB;-XX:MaxPermSize=128m" --JvmMs 128 --JvmMx 512
163+echo The service '%SERVICE_NAME%' has been installed.
164+
165+:end
166+cd "%CURRENT_DIR%"
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
--- fess-server/tags/fess-server-8.2.0/src/tomcat/bin/crawler.sh (revision 0)
+++ fess-server/tags/fess-server-8.2.0/src/tomcat/bin/crawler.sh (revision 1802)
@@ -0,0 +1,26 @@
1+#!/bin/sh
2+
3+CONTEXT_NAME=fess
4+
5+cd `dirname $0`
6+cd ..
7+TOMCAT_HOME=`pwd`
8+cd webapps/$CONTEXT_NAME
9+BASE_DIR=`pwd`
10+
11+CP_PATH=WEB-INF/cmd/resources:WEB-INF/classes
12+# added WEB-INF/lib/*.jar
13+for cp_path in `ls WEB-INF/lib/*.jar` ; do
14+ CP_PATH="$CP_PATH:$cp_path"
15+done
16+# added WEB-INF/cmd/lib/*.jar
17+for cp_path in `ls WEB-INF/cmd/lib/*.jar` ; do
18+ CP_PATH="$CP_PATH:$cp_path"
19+done
20+
21+SOLR_OPTS="$SOLR_OPTS -Dsolr.solr.home=$TOMCAT_HOME/solr -Dsolr.data.dir=$TOMCAT_HOME/solr/core1/data -Dfess.log.file=$BASE_DIR/WEB-INF/logs/fess_crawler.out"
22+FESS_OPTS="$FESS_OPTS -Dfess.crawler.process=true -Djava.awt.headless=true -server -XX:+UseGCOverheadLimit -XX:+UseConcMarkSweepGC -XX:+CMSIncrementalMode -XX:+UseTLAB -Xmx512m -XX:MaxPermSize=128m"
23+
24+java -cp $CP_PATH $SOLR_OPTS $FESS_OPTS jp.sf.fess.exec.Crawler $@
25+# args: --sessionId 20100518061741
26+
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
--- fess-server/tags/fess-server-8.2.0/src/tomcat/bin/html-screenshot.sh (revision 0)
+++ fess-server/tags/fess-server-8.2.0/src/tomcat/bin/html-screenshot.sh (revision 1802)
@@ -0,0 +1,14 @@
1+#!/bin/bash
2+
3+SCREEN_SHOT_CMD="wkhtmltoimage-amd64 --use-xserver "
4+CONVERT_CMD=/usr/bin/convert
5+
6+SIZE=300x
7+URL=$1
8+OUTPUT_FILE=$2
9+TMP_FILE=/tmp/$$_`basename $OUTPUT_FILE`
10+
11+$SCREEN_SHOT_CMD $URL $TMP_FILE
12+$CONVERT_CMD -resize $SIZE $TMP_FILE $OUTPUT_FILE
13+rm $TMP_FILE
14+
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
--- fess-server/tags/fess-server-8.2.0/src/tomcat/bin/setenv.bat (revision 0)
+++ fess-server/tags/fess-server-8.2.0/src/tomcat/bin/setenv.bat (revision 1802)
@@ -0,0 +1,5 @@
1+set JAVA_OPTS=%JAVA_OPTS% -Dsolr.solr.home="%CATALINA_HOME%\solr" -Dfess.solr.data.dir="%CATALINA_HOME%\solr\core1\data" -Dfess.log.file="%CATALINA_HOME%\webapps\fess\WEB-INF\logs\fess.out" -Djava.awt.headless=true -server -Xmx1g -XX:MaxPermSize=128m -XX:-UseGCOverheadLimit -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=75 -XX:+CMSIncrementalMode -XX:+CMSIncrementalPacing -XX:CMSIncrementalDutyCycleMin=0 -XX:+UseParNewGC -XX:+UseStringCache -XX:+UseTLAB -XX:+DisableExplicitGC
2+rem -XX:+UseCompressedOops
3+rem -XX:+UseCompressedStrings if java6u20 or above
4+rem -XX:+OptimizeStringConcat if java6u21 or above
5+
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
--- fess-server/tags/fess-server-8.2.0/build.xml (revision 0)
+++ fess-server/tags/fess-server-8.2.0/build.xml (revision 1802)
@@ -0,0 +1,454 @@
1+<?xml version="1.0" encoding="UTF-8"?>
2+
3+<project name="fess" default="all" basedir=".">
4+
5+ <property file="override.properties" />
6+ <property file="build.properties" />
7+
8+ <taskdef resource="net/sf/antcontrib/antlib.xml">
9+ <classpath>
10+ <pathelement location="${basedir}/lib/ant-contrib-1.0b2.jar" />
11+ </classpath>
12+ </taskdef>
13+
14+ <condition property="profile.mysql">
15+ <equals arg1="${build.fess.profile}" arg2="mysql"/>
16+ </condition>
17+
18+ <condition property="profile.oracle">
19+ <equals arg1="${build.fess.profile}" arg2="oracle"/>
20+ </condition>
21+
22+ <target name="setup.shell"
23+ description="--> Setup shell parameters">
24+ <condition property="shell.cmd" value="sh">
25+ <os family="unix" />
26+ </condition>
27+ <condition property="shell.options" value="-c">
28+ <os family="unix" />
29+ </condition>
30+ <condition property="shell.cmd" value="cmd.exe">
31+ <os family="windows" />
32+ </condition>
33+ <condition property="shell.options" value="/c">
34+ <os family="windows" />
35+ </condition>
36+ </target>
37+
38+ <!-- =================================================================== -->
39+ <!-- DISPLAY LOGO -->
40+ <!-- =================================================================== -->
41+
42+ <target name="display.logo"
43+ description="--> Display Logo">
44+ <echo>
45+--------------------------------
46+ ~ Full tExt Search System ~
47+--------------------------------
48+ </echo>
49+ </target>
50+
51+ <!-- =================================================================== -->
52+ <!-- CLEAN -->
53+ <!-- =================================================================== -->
54+
55+ <target name="clean" depends="display.logo"
56+ description="--> Clean All">
57+ <delete dir="${build.dir}"/>
58+ </target>
59+
60+ <!-- =================================================================== -->
61+ <!-- BUILD -->
62+ <!-- =================================================================== -->
63+
64+ <target name="build" depends="display.logo"
65+ description="--> Build Fess">
66+ <antcall target="build.fess"/>
67+ <antcall target="build.lucene-gosen"/>
68+ <antcall target="setup.tomcat"/>
69+ <antcall target="setup.solr"/>
70+ <antcall target="setup.server"/>
71+ <antcall target="package"/>
72+ </target>
73+
74+ <!-- =================================================================== -->
75+ <!-- BUILD FESS APPLICATION -->
76+ <!-- =================================================================== -->
77+
78+ <target name="build.fess"
79+ description="--> Build Fess Application">
80+ <mkdir dir="${build.dir}"/>
81+
82+ <antcall target="checkout.fess"/>
83+ <antcall target="build.fess.app"/>
84+
85+ <antcall target="checkout.fess.solr.plugin"/>
86+ <antcall target="build.fess.solr.plugin"/>
87+ </target>
88+
89+ <target name="checkout.fess"
90+ description="--> Checkout Fess Application">
91+ <exec
92+ executable="svn"
93+ dir="${build.dir}"
94+ >
95+ <arg line="checkout ${fess.app.svn.path} --revision ${fess.app.svn.revision} ${fess.app.svn.module}"/>
96+ </exec>
97+ </target>
98+
99+ <target name="build.fess.app.mysql" if="profile.mysql"
100+ description="--> Build Fess app for mysql">
101+ <!-- build -->
102+ <delete file="${build.fess.app.dir}/src/main/java/jp/sf/fess/helper/impl/H2DatabaseHelperImpl.java"/>
103+ <delete file="${build.fess.app.dir}/src/main/java/jp/sf/fess/servlet/H2ConfigServlet.java"/>
104+
105+ <exec
106+ executable="${shell.cmd}"
107+ failonerror="true"
108+ dir="${build.fess.app.dir}"
109+ >
110+ <arg line="${shell.options} 'mvn dbflute:download'"/>
111+ </exec>
112+ <exec
113+ executable="${shell.cmd}"
114+ failonerror="true"
115+ dir="${build.fess.app.dir}"
116+ >
117+ <arg line="${shell.options} 'mvn dbflute:jdbc -P ${build.fess.profile}'"/>
118+ </exec>
119+ <exec
120+ executable="${shell.cmd}"
121+ failonerror="true"
122+ dir="${build.fess.app.dir}"
123+ >
124+ <arg line="${shell.options} 'mvn dbflute:generate -P ${build.fess.profile}'"/>
125+ </exec>
126+ <exec
127+ executable="${shell.cmd}"
128+ failonerror="true"
129+ dir="${build.fess.app.dir}"
130+ >
131+ <arg line="${shell.options} 'mvn dbflute:sql2entity -P ${build.fess.profile}'"/>
132+ </exec>
133+
134+ <!-- workaround for mysql -->
135+ <replace dir="${build.fess.app.dir}/src/main/java/jp/sf/fess/db" token="// MySQL: " value="">
136+ <include name="**/*.java" />
137+ </replace>
138+ </target>
139+
140+ <target name="build.fess.app.oracle" if="profile.oracle"
141+ description="--> Build Fess app for oracle">
142+ <!-- build -->
143+ <delete file="${build.fess.app.dir}/src/main/java/jp/sf/fess/helper/impl/H2DatabaseHelperImpl.java"/>
144+ <delete file="${build.fess.app.dir}/src/main/java/jp/sf/fess/servlet/H2ConfigServlet.java"/>
145+
146+ <exec
147+ executable="${shell.cmd}"
148+ failonerror="true"
149+ dir="${build.fess.app.dir}"
150+ >
151+ <arg line="${shell.options} 'mvn dbflute:download'"/>
152+ </exec>
153+ <copy file="${driver.oracle.file}"
154+ todir="${build.fess.mydbflute.dir}/lib" overwrite="true"/>
155+ <exec
156+ executable="${shell.cmd}"
157+ failonerror="true"
158+ dir="${build.fess.app.dir}"
159+ >
160+ <arg line="${shell.options} 'mvn dbflute:jdbc -P ${build.fess.profile}'"/>
161+ </exec>
162+ <replace file="${build.fess.app.dir}/dbflute_oracle/schema/project-schema-fess.xml"
163+ token="name=&quot;DATA_CONFIG_TO_B_TYPE&quot;"
164+ value="javaName=&quot;DataConfigToBrowserTypeMapping&quot; name=&quot;DATA_CONFIG_TO_B_TYPE&quot;"
165+ />
166+ <replace file="${build.fess.app.dir}/dbflute_oracle/schema/project-schema-fess.xml"
167+ token="name=&quot;DATA_CONFIG_TO_LABEL_TYPE&quot;"
168+ value="javaName=&quot;DataConfigToLabelTypeMapping&quot; name=&quot;DATA_CONFIG_TO_LABEL_TYPE&quot;"
169+ />
170+ <replace file="${build.fess.app.dir}/dbflute_oracle/schema/project-schema-fess.xml"
171+ token="name=&quot;DATA_CONFIG_TO_ROLE_TYPE&quot;"
172+ value="javaName=&quot;DataConfigToRoleTypeMapping&quot; name=&quot;DATA_CONFIG_TO_ROLE_TYPE&quot;"
173+ />
174+ <replace file="${build.fess.app.dir}/dbflute_oracle/schema/project-schema-fess.xml"
175+ token="name=&quot;FILE_CONFIG_TO_B_TYPE&quot;"
176+ value="javaName=&quot;FileConfigToBrowserTypeMapping&quot; name=&quot;FILE_CONFIG_TO_B_TYPE&quot;"
177+ />
178+ <replace file="${build.fess.app.dir}/dbflute_oracle/schema/project-schema-fess.xml"
179+ token="name=&quot;FILE_CONFIG_TO_LABEL_TYPE&quot;"
180+ value="javaName=&quot;FileConfigToLabelTypeMapping&quot; name=&quot;FILE_CONFIG_TO_LABEL_TYPE&quot;"
181+ />
182+ <replace file="${build.fess.app.dir}/dbflute_oracle/schema/project-schema-fess.xml"
183+ token="name=&quot;FILE_CONFIG_TO_ROLE_TYPE&quot;"
184+ value="javaName=&quot;FileConfigToRoleTypeMapping&quot; name=&quot;FILE_CONFIG_TO_ROLE_TYPE&quot;"
185+ />
186+ <replace file="${build.fess.app.dir}/dbflute_oracle/schema/project-schema-fess.xml"
187+ token="name=&quot;LABEL_TYPE_TO_ROLE_TYPE&quot;"
188+ value="javaName=&quot;LabelTypeToRoleTypeMapping&quot; name=&quot;LABEL_TYPE_TO_ROLE_TYPE&quot;"
189+ />
190+ <replace file="${build.fess.app.dir}/dbflute_oracle/schema/project-schema-fess.xml"
191+ token="name=&quot;WEB_CONFIG_TO_B_TYPE&quot;"
192+ value="javaName=&quot;WebConfigToBrowserTypeMapping&quot; name=&quot;WEB_CONFIG_TO_B_TYPE&quot;"
193+ />
194+ <replace file="${build.fess.app.dir}/dbflute_oracle/schema/project-schema-fess.xml"
195+ token="name=&quot;WEB_CONFIG_TO_LABEL_TYPE&quot;"
196+ value="javaName=&quot;WebConfigToLabelTypeMapping&quot; name=&quot;WEB_CONFIG_TO_LABEL_TYPE&quot;"
197+ />
198+ <replace file="${build.fess.app.dir}/dbflute_oracle/schema/project-schema-fess.xml"
199+ token="name=&quot;WEB_CONFIG_TO_ROLE_TYPE&quot;"
200+ value="javaName=&quot;WebConfigToRoleTypeMapping&quot; name=&quot;WEB_CONFIG_TO_ROLE_TYPE&quot;"
201+ />
202+ <replace file="${build.fess.app.dir}/dbflute_oracle/schema/project-schema-fess.xml"
203+ token="dbType=&quot;FLOAT&quot; javaType=&quot;java.math.BigDecimal&quot;"
204+ value="dbType=&quot;FLOAT&quot; javaType=&quot;Float&quot;"
205+ />
206+ <exec
207+ executable="${shell.cmd}"
208+ failonerror="true"
209+ dir="${build.fess.app.dir}"
210+ >
211+ <arg line="${shell.options} 'mvn dbflute:generate -P ${build.fess.profile}'"/>
212+ </exec>
213+ <exec
214+ executable="${shell.cmd}"
215+ failonerror="true"
216+ dir="${build.fess.app.dir}"
217+ >
218+ <arg line="${shell.options} 'mvn dbflute:sql2entity -P ${build.fess.profile}'"/>
219+ </exec>
220+
221+ </target>
222+
223+ <target name="build.fess.app" depends="setup.shell,build.fess.app.mysql,build.fess.app.oracle"
224+ description="--> Build Fess app by Maven 2">
225+ <!-- build -->
226+ <exec
227+ executable="${shell.cmd}"
228+ failonerror="true"
229+ dir="${build.fess.app.dir}"
230+ >
231+ <arg line="${shell.options} 'mvn install -P ${build.fess.profile} -DskipTests=true'"/>
232+ </exec>
233+ </target>
234+
235+ <!-- =================================================================== -->
236+ <!-- BUILD lucene-gosen -->
237+ <!-- =================================================================== -->
238+
239+ <target name="build.lucene-gosen"
240+ description="--> Build lucene-gosen">
241+ <mkdir dir="${build.dir}"/>
242+
243+ <antcall target="checkout.lucene-gosen"/>
244+ <antcall target="build.lucene-gosen.app"/>
245+ </target>
246+
247+ <target name="checkout.lucene-gosen"
248+ description="--> Checkout lucene-gosen">
249+ <exec
250+ executable="svn"
251+ dir="${build.dir}"
252+ >
253+ <arg line="checkout ${lucene-gosen.svn.path} --revision ${lucene-gosen.svn.revision} ${lucene-gosen.svn.module}"/>
254+ </exec>
255+ </target>
256+
257+ <target name="build.lucene-gosen.app" depends="setup.shell"
258+ description="--> Build lucene-gosen by Ant">
259+ <!-- build -->
260+ <exec
261+ executable="${shell.cmd}"
262+ failonerror="true"
263+ dir="${build.lucene-gosen.dir}"
264+ >
265+ <arg line="${shell.options} 'ant nodic-jar'"/>
266+ </exec>
267+ <!-- build dic -->
268+ <exec
269+ executable="${shell.cmd}"
270+ failonerror="true"
271+ dir="${build.lucene-gosen.dir}"
272+ >
273+ <arg line="${shell.options} 'ant build-dic-naist-chasen'"/>
274+ </exec>
275+ </target>
276+
277+ <!-- =================================================================== -->
278+ <!-- BUILD FESS SOLR PLUGIN -->
279+ <!-- =================================================================== -->
280+
281+ <target name="checkout.fess.solr.plugin"
282+ description="--> Checkout Fess Solr Plugin">
283+ <exec
284+ executable="svn"
285+ dir="${build.dir}"
286+ >
287+ <arg line="checkout ${fess.solr.plugin.svn.path} --revision ${fess.solr.plugin.svn.revision} ${fess.solr.plugin.svn.module}"/>
288+ </exec>
289+ </target>
290+
291+ <target name="build.fess.solr.plugin" depends="setup.shell"
292+ description="--> Build Fess Solr Plugin by Maven 2">
293+ <!-- build -->
294+ <exec
295+ executable="${shell.cmd}"
296+ failonerror="true"
297+ dir="${build.fess.solr.plugin.dir}"
298+ >
299+ <arg line="${shell.options} 'mvn install dependency:copy-dependencies -DskipTests=true'"/>
300+ </exec>
301+ </target>
302+
303+ <!-- =================================================================== -->
304+ <!-- SETUP TOMCAT -->
305+ <!-- =================================================================== -->
306+
307+ <target name="setup.tomcat"
308+ description="--> Setup Tomcat">
309+ <mkdir dir="${build.dir}"/>
310+ <get usetimestamp="true" dest="${build.tomcat.file}" src="${tomcat.url}"/>
311+ <unzip src="${build.tomcat.file}" dest="${build.dir}"/>
312+
313+ <!-- Clean webapps -->
314+ <delete dir="${build.tomcat.dir}/webapps/ROOT"/>
315+ <delete dir="${build.tomcat.dir}/webapps/docs"/>
316+ <delete dir="${build.tomcat.dir}/webapps/examples"/>
317+ <delete dir="${build.tomcat.dir}/webapps/host-manager"/>
318+
319+ <move todir="${package.build.dir}">
320+ <fileset dir="${build.tomcat.dir}"/>
321+ </move>
322+ </target>
323+
324+ <!-- =================================================================== -->
325+ <!-- SETUP SOLR -->
326+ <!-- =================================================================== -->
327+
328+ <target name="setup.solr"
329+ description="--> Setup Solr">
330+ <mkdir dir="${build.dir}"/>
331+ <get usetimestamp="true" dest="${build.solr.file}" src="${solr.url}"/>
332+ <unzip src="${build.solr.file}" dest="${build.dir}"/>
333+ </target>
334+
335+ <!-- =================================================================== -->
336+ <!-- SETUP SERVER -->
337+ <!-- =================================================================== -->
338+
339+ <target name="setup.server"
340+ description="--> Setup Server">
341+ <mkdir dir="${build.dir}"/>
342+ <!-- copy fess.war -->
343+ <unwar src="${build.fess.app.war.file}"
344+ dest="${build.fess.app.deployed.war}"/>
345+ <!-- copy solr.war -->
346+ <unwar src="${build.solr.war.file}"
347+ dest="${build.solr.deployed.war}"/>
348+ <!-- copy solr example -->
349+ <copy todir="${package.build.dir}/solr/core1" overwrite="true">
350+ <fileset dir="${build.solr.example.dir}/solr">
351+ <include name="**"/>
352+ </fileset>
353+ </copy>
354+ <!-- Solr4 -->
355+ <copy todir="${package.build.dir}/solr/core1/conf" overwrite="true">
356+ <fileset dir="${build.solr.example.dir}/solr/collection1/conf">
357+ <include name="**"/>
358+ </fileset>
359+ </copy>
360+ <delete dir="${package.build.dir}/solr/core1/collection1"/>
361+ <delete file="${package.build.dir}/solr/core1/README.txt"/>
362+ <delete file="${package.build.dir}/solr/core1/solr.xml"/>
363+ <move file="${package.build.dir}/solr/core1/zoo.cfg"
364+ tofile="${package.build.dir}/solr/zoo.cfg"/>
365+ <!-- Logging -->
366+ <copy todir="${package.build.dir}/webapps/solr/WEB-INF/lib" overwrite="true">
367+ <fileset dir="${build.solr.example.dir}/lib/ext">
368+ <include name="*.jar"/>
369+ </fileset>
370+ </copy>
371+ <mkdir dir="${package.build.dir}/webapps/solr/WEB-INF/classes"/>
372+ <copy file="${build.solr.example.dir}/resources/log4j.properties"
373+ todir="${package.build.dir}/webapps/solr/WEB-INF/classes" overwrite="true"/>
374+ <!-- copy solr dist -->
375+ <mkdir dir="${package.build.dir}/solr/dist"/>
376+ <copy todir="${package.build.dir}/solr/dist" overwrite="true">
377+ <fileset dir="${build.solr.dir}/dist">
378+ <include name="**"/>
379+ </fileset>
380+ </copy>
381+ <!-- copy solr contrib -->
382+ <mkdir dir="${package.build.dir}/solr/contrib"/>
383+ <copy todir="${package.build.dir}/solr/contrib" overwrite="true">
384+ <fileset dir="${build.solr.dir}/contrib">
385+ <include name="**"/>
386+ </fileset>
387+ </copy>
388+ <!-- copy solr plugin -->
389+ <mkdir dir="${build.fess.solr.plugin.deployed.jar.dir}"/>
390+ <copy file="${build.fess.solr.plugin.jar.file}"
391+ tofile="${build.fess.solr.plugin.deployed.jar.file}" overwrite="true"/>
392+ <copy file="${build.fess.suggest.plugin.jar.file}"
393+ tofile="${build.fess.suggest.plugin.deployed.jar.file}" overwrite="true"/>
394+ <copy todir="${package.build.dir}/solr/lib" overwrite="true">
395+ <fileset dir="${build.fess.solr.plugin.dir}/target/dependency">
396+ <include name="icu4j-*.jar"/>
397+ </fileset>
398+ </copy>
399+ <copy file="${package.build.dir}/solr/core1/conf/lang/userdict_ja.txt"
400+ tofile="${package.build.dir}/solr/core1/conf/lang/userdict_suggest_ja.txt"
401+ overwrite="true"/>
402+ <!-- copy lucene-gosen -->
403+ <mkdir dir="${package.build.dir}/solr/lib"/>
404+ <copy todir="${package.build.dir}/solr/lib" overwrite="true">
405+ <fileset dir="${build.lucene-gosen.dir}/dist">
406+ <include name="*.jar"/>
407+ </fileset>
408+ </copy>
409+ <mkdir dir="${package.build.dir}/solr/core1/conf/dictionary/naist-chasen"/>
410+ <copy todir="${package.build.dir}/solr/core1/conf/dictionary/naist-chasen"
411+ overwrite="true">
412+ <fileset dir="${build.lucene-gosen.dir}/dictionary/naist-chasen">
413+ <include name="*.sen"/>
414+ </fileset>
415+ </copy>
416+ <copy todir="${package.build.dir}/solr/core1/conf" overwrite="true">
417+ <fileset dir="${build.lucene-gosen.dir}/example">
418+ <include name="*_ja.txt"/>
419+ </fileset>
420+ </copy>
421+ <!-- copy tomcat -->
422+ <copy todir="${package.build.dir}" overwrite="true">
423+ <fileset dir="${src.tomcat.dir}">
424+ <include name="**"/>
425+ </fileset>
426+ </copy>
427+ <concat destfile="${package.build.dir}/NOTICE" append="true"
428+ encoding="UTF-8" outputencoding="UTF-8">
429+ <filelist dir="${basedir}" files="NOTICE"/>
430+ </concat>
431+ </target>
432+
433+ <target name="package"
434+ description="--> Package Fess">
435+ <!-- zip -->
436+ <zip file="${package.build.file}">
437+ <zipfileset dir="${build.dir}">
438+ <include name="${package.build.name}/**"/>
439+ </zipfileset>
440+ </zip>
441+ </target>
442+
443+ <!-- =================================================================== -->
444+ <!-- ALL BUILD -->
445+ <!-- =================================================================== -->
446+
447+ <target name="all" depends="display.logo"
448+ description="--> Build all">
449+ <antcall target="clean"/>
450+ <antcall target="build"/>
451+ </target>
452+
453+</project>
454+
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
旧リポジトリブラウザで表示