Commit 89b449818fda01bb9e5f6e360eb3706f22fec870
1 parent
4eb4f872
Exists in
master
and in
39 other branches
Arquivos de configuração para o sistema de buscas integrada
git-svn-id: http://repositorio.interlegis.gov.br/colab/trunk@5846 bee1b3ed-c3eb-0310-9994-b88e04532788
Showing
5 changed files
with
1872 additions
and
10 deletions
Show diff stats
colab/settings.py
| ... | ... | @@ -13,13 +13,6 @@ PROJECT_PATH = os.path.abspath(os.path.dirname(__file__)) |
| 13 | 13 | |
| 14 | 14 | MANAGERS = ADMINS |
| 15 | 15 | |
| 16 | -DATABASES = { | |
| 17 | - 'default': { | |
| 18 | - 'ENGINE': 'django.db.backends.sqlite3', | |
| 19 | - 'NAME': os.path.join(PROJECT_PATH, 'colab.db'), | |
| 20 | - } | |
| 21 | -} | |
| 22 | - | |
| 23 | 16 | LOGIN_URL = '/login/' |
| 24 | 17 | |
| 25 | 18 | # Local time zone for this installation. Choices can be found here: |
| ... | ... | @@ -66,9 +59,6 @@ STATICFILES_FINDERS = ( |
| 66 | 59 | # 'django.contrib.staticfiles.finders.DefaultStorageFinder', |
| 67 | 60 | ) |
| 68 | 61 | |
| 69 | -# Make this unique, and don't share it with anybody. | |
| 70 | -SECRET_KEY = '^$10gkd7%o==sa$f$&au!c*w*@bue^n7fn*o8sederb9a1cup5' | |
| 71 | - | |
| 72 | 62 | # List of callables that know how to import templates from various sources. |
| 73 | 63 | TEMPLATE_LOADERS = ( |
| 74 | 64 | 'django.template.loaders.filesystem.Loader', |
| ... | ... | @@ -136,3 +126,6 @@ LOGGING = { |
| 136 | 126 | }, |
| 137 | 127 | } |
| 138 | 128 | } |
| 129 | + | |
| 130 | +from settings_local import * | |
| 131 | + | ... | ... |
| ... | ... | @@ -0,0 +1,16 @@ |
| 1 | +Installation instructions for Ubuntu 10.04 | |
| 2 | +------------------------------------------- | |
| 3 | + | |
| 4 | +* Install Java, tomcat, Solr and JDBC Postgres drivers (Ubuntu partner repositories must be enabled): | |
| 5 | +sudo apt-get install sun-java6-bin tomcat6 solr-common libpg-java | |
| 6 | + | |
| 7 | +* Link the JDBC Postgres drivers into the Solr installation: | |
| 8 | +sudo ln -s /usr/share/java/postgresql-jdbc3-8.4.jar /usr/share/solr/WEB-INF/lib/ | |
| 9 | + | |
| 10 | +* Check data-config.xml to make sure all information to connect to the databases are right | |
| 11 | + | |
| 12 | +* Copy the configuration files from this folder into /etc/solr/conf/ | |
| 13 | + | |
| 14 | +* Restart tomcat: | |
| 15 | +sudo /etc/init.d/tomcat6 restart | |
| 16 | + | ... | ... |
| ... | ... | @@ -0,0 +1,314 @@ |
| 1 | + <dataConfig> | |
| 2 | + <dataSource name="trac" | |
| 3 | + type="JdbcDataSource" | |
| 4 | + driver="org.postgresql.Driver" | |
| 5 | + url="jdbc:postgresql://localhost/trac_gitec" | |
| 6 | + user="colab" /> | |
| 7 | + <dataSource name="colab" | |
| 8 | + type="JdbcDataSource" | |
| 9 | + driver="org.postgresql.Driver" | |
| 10 | + url="jdbc:postgresql://localhost/colab" | |
| 11 | + user="colab" /> | |
| 12 | + | |
| 13 | + <document> | |
| 14 | + | |
| 15 | + <entity name="wiki" | |
| 16 | + dataSource="trac" | |
| 17 | + transformer="TemplateTransformer,DateFormatTransformer" | |
| 18 | + query="SELECT | |
| 19 | + name, | |
| 20 | + TIMESTAMP 'epoch' + max(time) * INTERVAL '1s' AS modified, | |
| 21 | + max(version) AS version | |
| 22 | + FROM wiki GROUP BY name" | |
| 23 | + deltaQuery=" | |
| 24 | + SELECT DISTINCT | |
| 25 | + name | |
| 26 | + FROM | |
| 27 | + wiki | |
| 28 | + WHERE | |
| 29 | + time > EXTRACT( | |
| 30 | + epoch FROM TIMESTAMP '${dataimporter.wiki.last_index_time}' | |
| 31 | + )" | |
| 32 | + deltaImportQuery=" | |
| 33 | + SELECT | |
| 34 | + name, | |
| 35 | + TIMESTAMP 'epoch' + max(time) * INTERVAL '1s' AS modified, | |
| 36 | + max(version) AS version | |
| 37 | + FROM | |
| 38 | + wiki | |
| 39 | + WHERE | |
| 40 | + name = '${dataimporter.delta.id}' | |
| 41 | + GROUP BY name"> | |
| 42 | + | |
| 43 | + <entity name="wiki_creation" | |
| 44 | + dataSource="trac" | |
| 45 | + query="SELECT | |
| 46 | + author AS creator, | |
| 47 | + TIMESTAMP 'epoch' + time * INTERVAL '1s' AS created | |
| 48 | + FROM | |
| 49 | + wiki | |
| 50 | + WHERE | |
| 51 | + name = '${wiki.name}' | |
| 52 | + AND version = 1" /> | |
| 53 | + | |
| 54 | + <entity name="wiki_collaborators" | |
| 55 | + dataSource="trac" | |
| 56 | + query="SELECT DISTINCT | |
| 57 | + author AS collaborator | |
| 58 | + FROM | |
| 59 | + wiki | |
| 60 | + WHERE | |
| 61 | + name = '${wiki.name}' | |
| 62 | + AND author != ''" /> | |
| 63 | + | |
| 64 | + <entity name="content" | |
| 65 | + dataSource="trac" | |
| 66 | + query="SELECT | |
| 67 | + text AS content | |
| 68 | + FROM | |
| 69 | + wiki | |
| 70 | + WHERE | |
| 71 | + name = '${wiki.name}' | |
| 72 | + AND version = '${wiki.version}'" /> | |
| 73 | + | |
| 74 | + <field column="uid" template="WIKI_${wiki.name}" /> | |
| 75 | + <field column="id" template="${wiki.name}" /> | |
| 76 | + <field column="type" template="wiki" /> | |
| 77 | + <field column="title" template="${wiki.name}" /> | |
| 78 | + <field column="created" name="created" | |
| 79 | + dateTimeFormat="yyyy-MM-dd hh:mm:ss"/> | |
| 80 | + <field column="modified" name="modified" | |
| 81 | + dateTimeFormat="yyyy-MM-dd hh:mm:ss"/> | |
| 82 | + </entity> | |
| 83 | + | |
| 84 | + <entity name="ticket" | |
| 85 | + dataSource="trac" | |
| 86 | + transformer="TemplateTransformer,DateFormatTransformer" | |
| 87 | + pk="id" | |
| 88 | + deltaQuery=" | |
| 89 | + SELECT | |
| 90 | + id | |
| 91 | + FROM | |
| 92 | + ticket | |
| 93 | + WHERE | |
| 94 | + time > EXTRACT( | |
| 95 | + epoch FROM TIMESTAMP '${dataimporter.ticket.last_index_time}' | |
| 96 | + )" | |
| 97 | + query="SELECT | |
| 98 | + id, | |
| 99 | + summary, | |
| 100 | + description, | |
| 101 | + milestone, | |
| 102 | + priority, | |
| 103 | + component, | |
| 104 | + version, | |
| 105 | + severity, | |
| 106 | + reporter, | |
| 107 | + owner, | |
| 108 | + status, | |
| 109 | + TIMESTAMP 'epoch' + time * INTERVAL '1s' AS created, | |
| 110 | + TIMESTAMP 'epoch' + changetime * INTERVAL '1s' AS modified | |
| 111 | + FROM | |
| 112 | + ticket"> | |
| 113 | + | |
| 114 | + <entity name="ticket_collaborator" | |
| 115 | + dataSource="trac" | |
| 116 | + query="SELECT | |
| 117 | + reporter AS collaborator | |
| 118 | + FROM | |
| 119 | + ticket | |
| 120 | + WHERE | |
| 121 | + id = ${ticket.id} | |
| 122 | + | |
| 123 | + UNION | |
| 124 | + | |
| 125 | + SELECT | |
| 126 | + owner AS collaborator | |
| 127 | + FROM | |
| 128 | + ticket | |
| 129 | + WHERE | |
| 130 | + id = ${ticket.id} | |
| 131 | + | |
| 132 | + UNION | |
| 133 | + | |
| 134 | + SELECT DISTINCT | |
| 135 | + author AS collaborator | |
| 136 | + FROM | |
| 137 | + ticket_change | |
| 138 | + WHERE | |
| 139 | + ticket = ${ticket.id}" /> | |
| 140 | + | |
| 141 | + <entity name="ticket_keywords" | |
| 142 | + dataSource="trac" | |
| 143 | + query="SELECT DISTINCT | |
| 144 | + REGEXP_SPLIT_TO_TABLE(keywords, ',|\\s') AS keyword | |
| 145 | + FROM | |
| 146 | + ticket | |
| 147 | + WHERE | |
| 148 | + id = ${ticket.id} AND | |
| 149 | + keywords != ''" /> | |
| 150 | + | |
| 151 | + <entity name="ticket_comments" | |
| 152 | + dataSource="trac" | |
| 153 | + query="SELECT | |
| 154 | + newvalue AS comment | |
| 155 | + FROM | |
| 156 | + ticket_change | |
| 157 | + WHERE | |
| 158 | + ticket = ${ticket.id} | |
| 159 | + AND field = 'comment'" /> | |
| 160 | + | |
| 161 | + <field column="uid" template="TICKET_${ticket.id}" /> | |
| 162 | + <field column="type" template="ticket" /> | |
| 163 | + <field column="title" | |
| 164 | + template="#${ticket.id} (${ticket.status}) - ${ticket.summary}" /> | |
| 165 | + <field column="creator" template="${ticket.reporter}" /> | |
| 166 | + <field column="created" name="created" | |
| 167 | + dateTimeFormat="yyyy-MM-dd hh:mm:ss"/> | |
| 168 | + <field column="modified" name="modified" | |
| 169 | + dateTimeFormat="yyyy-MM-dd hh:mm:ss"/> | |
| 170 | + </entity> | |
| 171 | + | |
| 172 | + <entity name="changeset" | |
| 173 | + dataSource="trac" | |
| 174 | + transformer="TemplateTransformer,DateFormatTransformer" | |
| 175 | + pk="rev" | |
| 176 | + deltaQuery=" | |
| 177 | + SELECT | |
| 178 | + rev | |
| 179 | + FROM | |
| 180 | + revision | |
| 181 | + WHERE | |
| 182 | + time > EXTRACT( | |
| 183 | + epoch FROM TIMESTAMP '${dataimporter.changeset.last_index_time}' | |
| 184 | + )" | |
| 185 | + | |
| 186 | + query="SELECT | |
| 187 | + rev AS revision, | |
| 188 | + author AS creator, | |
| 189 | + author AS collaborator, | |
| 190 | + TIMESTAMP 'epoch' + time * INTERVAL '1s' AS created, | |
| 191 | + message | |
| 192 | + FROM | |
| 193 | + revision"> | |
| 194 | + <field column="uid" template="CHANGESET_${changeset.revision}" /> | |
| 195 | + <field column="id" template="${changeset.revision}" /> | |
| 196 | + <field column="type" template="changeset" /> | |
| 197 | + <field column="title" | |
| 198 | + template="[${changeset.revision}] - ${changeset.message}" /> | |
| 199 | + <field column="created" name="created" | |
| 200 | + dateTimeFormat="yyyy-MM-dd hh:mm:ss"/> | |
| 201 | + </entity> | |
| 202 | + | |
| 203 | + <entity name="thread" | |
| 204 | + dataSource="colab" | |
| 205 | + transformer="TemplateTransformer,DateFormatTransformer" | |
| 206 | + deltaQuery=" | |
| 207 | + SELECT | |
| 208 | + thread_id AS id | |
| 209 | + FROM | |
| 210 | + super_archives_message | |
| 211 | + GROUP BY | |
| 212 | + thread_id | |
| 213 | + HAVING | |
| 214 | + max(received_time) > '${dataimporter.thread.last_index_time}'" | |
| 215 | + deltaImportQuery="SELECT | |
| 216 | + sam.thread_id AS id, | |
| 217 | + sat.subject_token AS name, | |
| 218 | + sat.latest_message_id, | |
| 219 | + saml.name AS mailinglist, | |
| 220 | + array_to_string(array_agg(sam.body), ' ') AS content | |
| 221 | + FROM | |
| 222 | + super_archives_message AS sam | |
| 223 | + JOIN super_archives_thread AS sat | |
| 224 | + ON sat.id = sam.thread_id | |
| 225 | + JOIN super_archives_mailinglist AS saml | |
| 226 | + ON sat.mailinglist_id = saml.id | |
| 227 | + WHERE | |
| 228 | + sat.id = '${dataimporter.delta.id}' | |
| 229 | + GROUP BY | |
| 230 | + sam.thread_id, | |
| 231 | + sat.subject_token, | |
| 232 | + sat.latest_message_id, | |
| 233 | + saml.name" | |
| 234 | + | |
| 235 | + query="SELECT | |
| 236 | + sam.thread_id AS id, | |
| 237 | + sat.subject_token AS name, | |
| 238 | + sat.latest_message_id, | |
| 239 | + saml.name AS mailinglist, | |
| 240 | + array_to_string(array_agg(sam.body), ' ') AS content | |
| 241 | + FROM | |
| 242 | + super_archives_message AS sam | |
| 243 | + JOIN super_archives_thread AS sat | |
| 244 | + ON sat.id = sam.thread_id | |
| 245 | + JOIN super_archives_mailinglist AS saml | |
| 246 | + ON sat.mailinglist_id = saml.id | |
| 247 | + GROUP BY | |
| 248 | + sam.thread_id, | |
| 249 | + sat.subject_token, | |
| 250 | + sat.latest_message_id, | |
| 251 | + saml.name"> | |
| 252 | + | |
| 253 | + <!-- | |
| 254 | + Check about "DISTINCT ON" here: | |
| 255 | + http://archives.postgresql.org/pgsql-general/2002-06/msg01330.php | |
| 256 | + --> | |
| 257 | + <entity name="first_message" | |
| 258 | + dataSource="colab" | |
| 259 | + transformer="TemplateTransformer" | |
| 260 | + query="SELECT DISTINCT ON (sam.thread_id) | |
| 261 | + sam.body AS description, | |
| 262 | + sam.received_time AS created, | |
| 263 | + sam.subject_clean AS subject, | |
| 264 | + au.username AS creator | |
| 265 | + FROM | |
| 266 | + super_archives_message AS sam | |
| 267 | + JOIN super_archives_emailaddress AS saea | |
| 268 | + ON sam.from_address_id = saea.id | |
| 269 | + LEFT JOIN auth_user AS au | |
| 270 | + ON au.id = saea.user_id | |
| 271 | + WHERE | |
| 272 | + sam.thread_id = ${thread.id} | |
| 273 | + ORDER BY | |
| 274 | + sam.thread_id, | |
| 275 | + sam.received_time"> | |
| 276 | + <field column="title" template="${first_message.subject}" /> | |
| 277 | + </entity> | |
| 278 | + | |
| 279 | + <entity name="latest_message" | |
| 280 | + dataSource="colab" | |
| 281 | + query="SELECT | |
| 282 | + received_time AS modified | |
| 283 | + FROM | |
| 284 | + super_archives_message | |
| 285 | + WHERE | |
| 286 | + id = ${thread.latest_message_id}" /> | |
| 287 | + | |
| 288 | + <entity name="thread_collaborators" | |
| 289 | + dataSource="colab" | |
| 290 | + query="SELECT DISTINCT | |
| 291 | + au.username AS collaborator | |
| 292 | + FROM | |
| 293 | + super_archives_message AS sam | |
| 294 | + JOIN super_archives_emailaddress AS saea | |
| 295 | + ON sam.from_address_id = saea.id | |
| 296 | + JOIN auth_user AS au | |
| 297 | + ON au.id = saea.user_id | |
| 298 | + WHERE | |
| 299 | + thread_id = ${thread.id}" /> | |
| 300 | + | |
| 301 | + <field column="uid" template="THREAD_${thread.id}" /> | |
| 302 | + <field column="type" template="thread" /> | |
| 303 | + <field column="created" name="created" | |
| 304 | + dateTimeFormat="yyyy-MM-dd hh:mm:ss" /> | |
| 305 | + <field column="modified" name="modified" | |
| 306 | + dateTimeFormat="yyyy-MM-dd hh:mm:ss" /> | |
| 307 | + </entity> | |
| 308 | + </document> | |
| 309 | + | |
| 310 | +</dataConfig> | |
| 311 | + | |
| 312 | +<!-- | |
| 313 | +vim: ts=2 sw=2 ss=2 expandtab: | |
| 314 | +--> | ... | ... |
| ... | ... | @@ -0,0 +1,499 @@ |
| 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="example" version="1.2"> | |
| 49 | + <!-- attribute "name" is the name of this schema and is only used for display purposes. | |
| 50 | + Applications should change this to reflect the nature of the search collection. | |
| 51 | + version="1.2" is Solr's version number for the schema syntax and semantics. It should | |
| 52 | + not normally be changed by applications. | |
| 53 | + 1.0: multiValued attribute did not exist, all fields are multiValued by nature | |
| 54 | + 1.1: multiValued attribute introduced, false by default | |
| 55 | + 1.2: omitTermFreqAndPositions attribute introduced, true by default except for text fields. | |
| 56 | + --> | |
| 57 | + | |
| 58 | + <types> | |
| 59 | + <!-- field type definitions. The "name" attribute is | |
| 60 | + just a label to be used by field definitions. The "class" | |
| 61 | + attribute and any other attributes determine the real | |
| 62 | + behavior of the fieldType. | |
| 63 | + Class names starting with "solr" refer to java classes in the | |
| 64 | + org.apache.solr.analysis package. | |
| 65 | + --> | |
| 66 | + | |
| 67 | + <!-- The StrField type is not analyzed, but indexed/stored verbatim. | |
| 68 | + - StrField and TextField support an optional compressThreshold which | |
| 69 | + limits compression (if enabled in the derived fields) to values which | |
| 70 | + exceed a certain size (in characters). | |
| 71 | + --> | |
| 72 | + <fieldType name="string" class="solr.StrField" sortMissingLast="true" omitNorms="true"/> | |
| 73 | + | |
| 74 | + <!-- boolean type: "true" or "false" --> | |
| 75 | + <fieldType name="boolean" class="solr.BoolField" sortMissingLast="true" omitNorms="true"/> | |
| 76 | + <!--Binary data type. The data should be sent/retrieved in as Base64 encoded Strings --> | |
| 77 | + <fieldtype name="binary" class="solr.BinaryField"/> | |
| 78 | + | |
| 79 | + <!-- The optional sortMissingLast and sortMissingFirst attributes are | |
| 80 | + currently supported on types that are sorted internally as strings. | |
| 81 | + This includes "string","boolean","sint","slong","sfloat","sdouble","pdate" | |
| 82 | + - If sortMissingLast="true", then a sort on this field will cause documents | |
| 83 | + without the field to come after documents with the field, | |
| 84 | + regardless of the requested sort order (asc or desc). | |
| 85 | + - If sortMissingFirst="true", then a sort on this field will cause documents | |
| 86 | + without the field to come before documents with the field, | |
| 87 | + regardless of the requested sort order. | |
| 88 | + - If sortMissingLast="false" and sortMissingFirst="false" (the default), | |
| 89 | + then default lucene sorting will be used which places docs without the | |
| 90 | + field first in an ascending sort and last in a descending sort. | |
| 91 | + --> | |
| 92 | + | |
| 93 | + <!-- | |
| 94 | + Default numeric field types. For faster range queries, consider the tint/tfloat/tlong/tdouble types. | |
| 95 | + --> | |
| 96 | + <fieldType name="int" class="solr.TrieIntField" precisionStep="0" omitNorms="true" positionIncrementGap="0"/> | |
| 97 | + <fieldType name="float" class="solr.TrieFloatField" precisionStep="0" omitNorms="true" positionIncrementGap="0"/> | |
| 98 | + <fieldType name="long" class="solr.TrieLongField" precisionStep="0" omitNorms="true" positionIncrementGap="0"/> | |
| 99 | + <fieldType name="double" class="solr.TrieDoubleField" precisionStep="0" omitNorms="true" positionIncrementGap="0"/> | |
| 100 | + | |
| 101 | + <!-- | |
| 102 | + Numeric field types that index each value at various levels of precision | |
| 103 | + to accelerate range queries when the number of values between the range | |
| 104 | + endpoints is large. See the javadoc for NumericRangeQuery for internal | |
| 105 | + implementation details. | |
| 106 | + | |
| 107 | + Smaller precisionStep values (specified in bits) will lead to more tokens | |
| 108 | + indexed per value, slightly larger index size, and faster range queries. | |
| 109 | + A precisionStep of 0 disables indexing at different precision levels. | |
| 110 | + --> | |
| 111 | + <fieldType name="tint" class="solr.TrieIntField" precisionStep="8" omitNorms="true" positionIncrementGap="0"/> | |
| 112 | + <fieldType name="tfloat" class="solr.TrieFloatField" precisionStep="8" omitNorms="true" positionIncrementGap="0"/> | |
| 113 | + <fieldType name="tlong" class="solr.TrieLongField" precisionStep="8" omitNorms="true" positionIncrementGap="0"/> | |
| 114 | + <fieldType name="tdouble" class="solr.TrieDoubleField" precisionStep="8" omitNorms="true" positionIncrementGap="0"/> | |
| 115 | + | |
| 116 | + <!-- The format for this date field is of the form 1995-12-31T23:59:59Z, and | |
| 117 | + is a more restricted form of the canonical representation of dateTime | |
| 118 | + http://www.w3.org/TR/xmlschema-2/#dateTime | |
| 119 | + The trailing "Z" designates UTC time and is mandatory. | |
| 120 | + Optional fractional seconds are allowed: 1995-12-31T23:59:59.999Z | |
| 121 | + All other components are mandatory. | |
| 122 | + | |
| 123 | + Expressions can also be used to denote calculations that should be | |
| 124 | + performed relative to "NOW" to determine the value, ie... | |
| 125 | + | |
| 126 | + NOW/HOUR | |
| 127 | + ... Round to the start of the current hour | |
| 128 | + NOW-1DAY | |
| 129 | + ... Exactly 1 day prior to now | |
| 130 | + NOW/DAY+6MONTHS+3DAYS | |
| 131 | + ... 6 months and 3 days in the future from the start of | |
| 132 | + the current day | |
| 133 | + | |
| 134 | + Consult the DateField javadocs for more information. | |
| 135 | + | |
| 136 | + Note: For faster range queries, consider the tdate type | |
| 137 | + --> | |
| 138 | + <fieldType name="date" class="solr.TrieDateField" omitNorms="true" precisionStep="0" positionIncrementGap="0"/> | |
| 139 | + | |
| 140 | + <!-- A Trie based date field for faster date range queries and date faceting. --> | |
| 141 | + <fieldType name="tdate" class="solr.TrieDateField" omitNorms="true" precisionStep="6" positionIncrementGap="0"/> | |
| 142 | + | |
| 143 | + | |
| 144 | + <!-- | |
| 145 | + Note: | |
| 146 | + These should only be used for compatibility with existing indexes (created with older Solr versions) | |
| 147 | + or if "sortMissingFirst" or "sortMissingLast" functionality is needed. Use Trie based fields instead. | |
| 148 | + | |
| 149 | + Plain numeric field types that store and index the text | |
| 150 | + value verbatim (and hence don't support range queries, since the | |
| 151 | + lexicographic ordering isn't equal to the numeric ordering) | |
| 152 | + --> | |
| 153 | + <fieldType name="pint" class="solr.IntField" omitNorms="true"/> | |
| 154 | + <fieldType name="plong" class="solr.LongField" omitNorms="true"/> | |
| 155 | + <fieldType name="pfloat" class="solr.FloatField" omitNorms="true"/> | |
| 156 | + <fieldType name="pdouble" class="solr.DoubleField" omitNorms="true"/> | |
| 157 | + <fieldType name="pdate" class="solr.DateField" sortMissingLast="true" omitNorms="true"/> | |
| 158 | + | |
| 159 | + | |
| 160 | + <!-- | |
| 161 | + Note: | |
| 162 | + These should only be used for compatibility with existing indexes (created with older Solr versions) | |
| 163 | + or if "sortMissingFirst" or "sortMissingLast" functionality is needed. Use Trie based fields instead. | |
| 164 | + | |
| 165 | + Numeric field types that manipulate the value into | |
| 166 | + a string value that isn't human-readable in its internal form, | |
| 167 | + but with a lexicographic ordering the same as the numeric ordering, | |
| 168 | + so that range queries work correctly. | |
| 169 | + --> | |
| 170 | + <fieldType name="sint" class="solr.SortableIntField" sortMissingLast="true" omitNorms="true"/> | |
| 171 | + <fieldType name="slong" class="solr.SortableLongField" sortMissingLast="true" omitNorms="true"/> | |
| 172 | + <fieldType name="sfloat" class="solr.SortableFloatField" sortMissingLast="true" omitNorms="true"/> | |
| 173 | + <fieldType name="sdouble" class="solr.SortableDoubleField" sortMissingLast="true" omitNorms="true"/> | |
| 174 | + | |
| 175 | + | |
| 176 | + <!-- The "RandomSortField" is not used to store or search any | |
| 177 | + data. You can declare fields of this type it in your schema | |
| 178 | + to generate pseudo-random orderings of your docs for sorting | |
| 179 | + purposes. The ordering is generated based on the field name | |
| 180 | + and the version of the index, As long as the index version | |
| 181 | + remains unchanged, and the same field name is reused, | |
| 182 | + the ordering of the docs will be consistent. | |
| 183 | + If you want different psuedo-random orderings of documents, | |
| 184 | + for the same version of the index, use a dynamicField and | |
| 185 | + change the name | |
| 186 | + --> | |
| 187 | + <fieldType name="random" class="solr.RandomSortField" indexed="true" /> | |
| 188 | + | |
| 189 | + <!-- solr.TextField allows the specification of custom text analyzers | |
| 190 | + specified as a tokenizer and a list of token filters. Different | |
| 191 | + analyzers may be specified for indexing and querying. | |
| 192 | + | |
| 193 | + The optional positionIncrementGap puts space between multiple fields of | |
| 194 | + this type on the same document, with the purpose of preventing false phrase | |
| 195 | + matching across fields. | |
| 196 | + | |
| 197 | + For more info on customizing your analyzer chain, please see | |
| 198 | + http://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters | |
| 199 | + --> | |
| 200 | + | |
| 201 | + <!-- One can also specify an existing Analyzer class that has a | |
| 202 | + default constructor via the class attribute on the analyzer element | |
| 203 | + <fieldType name="text_greek" class="solr.TextField"> | |
| 204 | + <analyzer class="org.apache.lucene.analysis.el.GreekAnalyzer"/> | |
| 205 | + </fieldType> | |
| 206 | + --> | |
| 207 | + | |
| 208 | + <!-- A text field that only splits on whitespace for exact matching of words --> | |
| 209 | + <fieldType name="text_ws" class="solr.TextField" positionIncrementGap="100"> | |
| 210 | + <analyzer> | |
| 211 | + <tokenizer class="solr.WhitespaceTokenizerFactory"/> | |
| 212 | + </analyzer> | |
| 213 | + </fieldType> | |
| 214 | + | |
| 215 | + <!-- A text field that uses WordDelimiterFilter to enable splitting and matching of | |
| 216 | + words on case-change, alpha numeric boundaries, and non-alphanumeric chars, | |
| 217 | + so that a query of "wifi" or "wi fi" could match a document containing "Wi-Fi". | |
| 218 | + Synonyms and stopwords are customized by external files, and stemming is enabled. | |
| 219 | + --> | |
| 220 | + <fieldType name="text" class="solr.TextField" positionIncrementGap="100"> | |
| 221 | + <analyzer type="index"> | |
| 222 | + <tokenizer class="solr.WhitespaceTokenizerFactory"/> | |
| 223 | + <!-- in this example, we will only use synonyms at query time | |
| 224 | + <filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/> | |
| 225 | + --> | |
| 226 | + <!-- Case insensitive stop word removal. | |
| 227 | + add enablePositionIncrements=true in both the index and query | |
| 228 | + analyzers to leave a 'gap' for more accurate phrase queries. | |
| 229 | + --> | |
| 230 | + <filter class="solr.StopFilterFactory" | |
| 231 | + ignoreCase="true" | |
| 232 | + words="stopwords.txt" | |
| 233 | + enablePositionIncrements="true" | |
| 234 | + /> | |
| 235 | + <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1"/> | |
| 236 | + <filter class="solr.LowerCaseFilterFactory"/> | |
| 237 | + <filter class="solr.SnowballPorterFilterFactory" language="Portuguese" protected="protwords.txt"/> | |
| 238 | + </analyzer> | |
| 239 | + <analyzer type="query"> | |
| 240 | + <tokenizer class="solr.WhitespaceTokenizerFactory"/> | |
| 241 | + <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/> | |
| 242 | + <filter class="solr.StopFilterFactory" | |
| 243 | + ignoreCase="true" | |
| 244 | + words="stopwords.txt" | |
| 245 | + enablePositionIncrements="true" | |
| 246 | + /> | |
| 247 | + <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1"/> | |
| 248 | + <filter class="solr.LowerCaseFilterFactory"/> | |
| 249 | + <filter class="solr.SnowballPorterFilterFactory" language="Portuguese" protected="protwords.txt"/> | |
| 250 | + </analyzer> | |
| 251 | + </fieldType> | |
| 252 | + | |
| 253 | + | |
| 254 | + <!-- Less flexible matching, but less false matches. Probably not ideal for product names, | |
| 255 | + but may be good for SKUs. Can insert dashes in the wrong place and still match. --> | |
| 256 | + <fieldType name="textTight" class="solr.TextField" positionIncrementGap="100" > | |
| 257 | + <analyzer> | |
| 258 | + <tokenizer class="solr.WhitespaceTokenizerFactory"/> | |
| 259 | + <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="false"/> | |
| 260 | + <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/> | |
| 261 | + <filter class="solr.WordDelimiterFilterFactory" generateWordParts="0" generateNumberParts="0" catenateWords="1" catenateNumbers="1" catenateAll="0"/> | |
| 262 | + <filter class="solr.LowerCaseFilterFactory"/> | |
| 263 | + <filter class="solr.SnowballPorterFilterFactory" language="Portuguese" protected="protwords.txt"/> | |
| 264 | + <!-- this filter can remove any duplicate tokens that appear at the same position - sometimes | |
| 265 | + possible with WordDelimiterFilter in conjuncton with stemming. --> | |
| 266 | + <filter class="solr.RemoveDuplicatesTokenFilterFactory"/> | |
| 267 | + </analyzer> | |
| 268 | + </fieldType> | |
| 269 | + | |
| 270 | + | |
| 271 | + <!-- A general unstemmed text field - good if one does not know the language of the field --> | |
| 272 | + <fieldType name="textgen" class="solr.TextField" positionIncrementGap="100"> | |
| 273 | + <analyzer type="index"> | |
| 274 | + <tokenizer class="solr.WhitespaceTokenizerFactory"/> | |
| 275 | + <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" /> | |
| 276 | + <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="0"/> | |
| 277 | + <filter class="solr.LowerCaseFilterFactory"/> | |
| 278 | + </analyzer> | |
| 279 | + <analyzer type="query"> | |
| 280 | + <tokenizer class="solr.WhitespaceTokenizerFactory"/> | |
| 281 | + <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/> | |
| 282 | + <filter class="solr.StopFilterFactory" | |
| 283 | + ignoreCase="true" | |
| 284 | + words="stopwords.txt" | |
| 285 | + enablePositionIncrements="true" | |
| 286 | + /> | |
| 287 | + <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="0"/> | |
| 288 | + <filter class="solr.LowerCaseFilterFactory"/> | |
| 289 | + </analyzer> | |
| 290 | + </fieldType> | |
| 291 | + | |
| 292 | + | |
| 293 | + <!-- A general unstemmed text field that indexes tokens normally and also | |
| 294 | + reversed (via ReversedWildcardFilterFactory), to enable more efficient | |
| 295 | + leading wildcard queries. --> | |
| 296 | + <fieldType name="text_rev" class="solr.TextField" positionIncrementGap="100"> | |
| 297 | + <analyzer type="index"> | |
| 298 | + <tokenizer class="solr.WhitespaceTokenizerFactory"/> | |
| 299 | + <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" /> | |
| 300 | + <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="0"/> | |
| 301 | + <filter class="solr.LowerCaseFilterFactory"/> | |
| 302 | + <filter class="solr.ReversedWildcardFilterFactory" withOriginal="true" | |
| 303 | + maxPosAsterisk="3" maxPosQuestion="2" maxFractionAsterisk="0.33"/> | |
| 304 | + </analyzer> | |
| 305 | + <analyzer type="query"> | |
| 306 | + <tokenizer class="solr.WhitespaceTokenizerFactory"/> | |
| 307 | + <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/> | |
| 308 | + <filter class="solr.StopFilterFactory" | |
| 309 | + ignoreCase="true" | |
| 310 | + words="stopwords.txt" | |
| 311 | + enablePositionIncrements="true" | |
| 312 | + /> | |
| 313 | + <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="0"/> | |
| 314 | + <filter class="solr.LowerCaseFilterFactory"/> | |
| 315 | + </analyzer> | |
| 316 | + </fieldType> | |
| 317 | + | |
| 318 | + <!-- charFilter + WhitespaceTokenizer --> | |
| 319 | + <!-- | |
| 320 | + <fieldType name="textCharNorm" class="solr.TextField" positionIncrementGap="100" > | |
| 321 | + <analyzer> | |
| 322 | + <charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt"/> | |
| 323 | + <tokenizer class="solr.WhitespaceTokenizerFactory"/> | |
| 324 | + </analyzer> | |
| 325 | + </fieldType> | |
| 326 | + --> | |
| 327 | + | |
| 328 | + <!-- This is an example of using the KeywordTokenizer along | |
| 329 | + With various TokenFilterFactories to produce a sortable field | |
| 330 | + that does not include some properties of the source text | |
| 331 | + --> | |
| 332 | + <fieldType name="alphaOnlySort" class="solr.TextField" sortMissingLast="true" omitNorms="true"> | |
| 333 | + <analyzer> | |
| 334 | + <!-- KeywordTokenizer does no actual tokenizing, so the entire | |
| 335 | + input string is preserved as a single token | |
| 336 | + --> | |
| 337 | + <tokenizer class="solr.KeywordTokenizerFactory"/> | |
| 338 | + <!-- The LowerCase TokenFilter does what you expect, which can be | |
| 339 | + when you want your sorting to be case insensitive | |
| 340 | + --> | |
| 341 | + <filter class="solr.LowerCaseFilterFactory" /> | |
| 342 | + <!-- The TrimFilter removes any leading or trailing whitespace --> | |
| 343 | + <filter class="solr.TrimFilterFactory" /> | |
| 344 | + <!-- The PatternReplaceFilter gives you the flexibility to use | |
| 345 | + Java Regular expression to replace any sequence of characters | |
| 346 | + matching a pattern with an arbitrary replacement string, | |
| 347 | + which may include back references to portions of the original | |
| 348 | + string matched by the pattern. | |
| 349 | + | |
| 350 | + See the Java Regular Expression documentation for more | |
| 351 | + information on pattern and replacement string syntax. | |
| 352 | + | |
| 353 | + http://java.sun.com/j2se/1.5.0/docs/api/java/util/regex/package-summary.html | |
| 354 | + --> | |
| 355 | + <filter class="solr.PatternReplaceFilterFactory" | |
| 356 | + pattern="([^a-z])" replacement="" replace="all" | |
| 357 | + /> | |
| 358 | + </analyzer> | |
| 359 | + </fieldType> | |
| 360 | + | |
| 361 | + <fieldtype name="phonetic" stored="false" indexed="true" class="solr.TextField" > | |
| 362 | + <analyzer> | |
| 363 | + <tokenizer class="solr.StandardTokenizerFactory"/> | |
| 364 | + <filter class="solr.DoubleMetaphoneFilterFactory" inject="false"/> | |
| 365 | + </analyzer> | |
| 366 | + </fieldtype> | |
| 367 | + | |
| 368 | + <fieldtype name="payloads" stored="false" indexed="true" class="solr.TextField" > | |
| 369 | + <analyzer> | |
| 370 | + <tokenizer class="solr.WhitespaceTokenizerFactory"/> | |
| 371 | + <!-- | |
| 372 | + The DelimitedPayloadTokenFilter can put payloads on tokens... for example, | |
| 373 | + a token of "foo|1.4" would be indexed as "foo" with a payload of 1.4f | |
| 374 | + Attributes of the DelimitedPayloadTokenFilterFactory : | |
| 375 | + "delimiter" - a one character delimiter. Default is | (pipe) | |
| 376 | + "encoder" - how to encode the following value into a playload | |
| 377 | + float -> org.apache.lucene.analysis.payloads.FloatEncoder, | |
| 378 | + integer -> o.a.l.a.p.IntegerEncoder | |
| 379 | + identity -> o.a.l.a.p.IdentityEncoder | |
| 380 | + Fully Qualified class name implementing PayloadEncoder, Encoder must have a no arg constructor. | |
| 381 | + --> | |
| 382 | + <filter class="solr.DelimitedPayloadTokenFilterFactory" encoder="float"/> | |
| 383 | + </analyzer> | |
| 384 | + </fieldtype> | |
| 385 | + | |
| 386 | + <!-- lowercases the entire field value, keeping it as a single token. --> | |
| 387 | + <fieldType name="lowercase" class="solr.TextField" positionIncrementGap="100"> | |
| 388 | + <analyzer> | |
| 389 | + <tokenizer class="solr.KeywordTokenizerFactory"/> | |
| 390 | + <filter class="solr.LowerCaseFilterFactory" /> | |
| 391 | + </analyzer> | |
| 392 | + </fieldType> | |
| 393 | + | |
| 394 | + | |
| 395 | + <!-- since fields of this type are by default not stored or indexed, | |
| 396 | + any data added to them will be ignored outright. --> | |
| 397 | + <fieldtype name="ignored" stored="false" indexed="false" multiValued="true" class="solr.StrField" /> | |
| 398 | + | |
| 399 | + </types> | |
| 400 | + | |
| 401 | + | |
| 402 | + <fields> | |
| 403 | + <!-- Valid attributes for fields: | |
| 404 | + name: mandatory - the name for the field | |
| 405 | + type: mandatory - the name of a previously defined type from the | |
| 406 | + <types> section | |
| 407 | + indexed: true if this field should be indexed (searchable or sortable) | |
| 408 | + stored: true if this field should be retrievable | |
| 409 | + compressed: [false] if this field should be stored using gzip compression | |
| 410 | + (this will only apply if the field type is compressable; among | |
| 411 | + the standard field types, only TextField and StrField are) | |
| 412 | + multiValued: true if this field may contain multiple values per document | |
| 413 | + omitNorms: (expert) set to true to omit the norms associated with | |
| 414 | + this field (this disables length normalization and index-time | |
| 415 | + boosting for the field, and saves some memory). Only full-text | |
| 416 | + fields or fields that need an index-time boost need norms. | |
| 417 | + termVectors: [false] set to true to store the term vector for a | |
| 418 | + given field. | |
| 419 | + When using MoreLikeThis, fields used for similarity should be | |
| 420 | + stored for best performance. | |
| 421 | + termPositions: Store position information with the term vector. | |
| 422 | + This will increase storage costs. | |
| 423 | + termOffsets: Store offset information with the term vector. This | |
| 424 | + will increase storage costs. | |
| 425 | + default: a value that should be used if no value is specified | |
| 426 | + when adding a document. | |
| 427 | + --> | |
| 428 | + | |
| 429 | + <!-- Base fields (all should be indexed and stored)--> | |
| 430 | + <field name="uid" type="string" indexed="true" stored="true" required="true" /> | |
| 431 | + <field name="id" type="string" indexed="true" stored="true" required="true" /> | |
| 432 | + <field name="type" type="string" indexed="true" stored="true" required="true" /> | |
| 433 | + <field name="title" type="text" indexed="true" stored="true" required="true" /> | |
| 434 | + <field name="description" type="text" indexed="true" stored="true" /> | |
| 435 | + <field name="creator" type="string" indexed="true" stored="true" /> | |
| 436 | + <field name="created" type="date" indexed="true" stored="true" /> | |
| 437 | + <field name="modified" type="date" indexed="true" stored="true" /> | |
| 438 | + | |
| 439 | + <!-- All next fields shoult NOT be stored --> | |
| 440 | + <field name="collaborator" type="textgen" indexed="true" stored="false" multiValued="true" /> | |
| 441 | + <field name="name" type="string" indexed="true" stored="false" /> | |
| 442 | + <field name="content" type="text" indexed="true" stored="false" /> | |
| 443 | + <field name="comment" type="text" indexed="true" stored="false" multiValued="true" /> | |
| 444 | + <field name="keyword" type="text" indexed="true" stored="false" multiValued="true" /> | |
| 445 | + <field name="milestone" type="string" indexed="true" stored="false" /> | |
| 446 | + <field name="priority" type="string" indexed="true" stored="false" /> | |
| 447 | + <field name="component" type="string" indexed="true" stored="false" /> | |
| 448 | + <field name="version" type="string" indexed="true" stored="false" /> | |
| 449 | + <field name="severity" type="string" indexed="true" stored="false" /> | |
| 450 | + <field name="reporter" type="textgen" indexed="true" stored="false" /> | |
| 451 | + <field name="owner" type="textgen" indexed="true" stored="false" /> | |
| 452 | + <field name="status" type="string" indexed="true" stored="false" /> | |
| 453 | + <field name="subject" type="text" indexed="true" stored="false" /> | |
| 454 | + <field name="revision" type="int" indexed="true" stored="false" /> | |
| 455 | + <field name="mailinglist" type="textgen" indexed="true" stored="false" /> | |
| 456 | + | |
| 457 | + <!-- catchall field, containing all other searchable text fields (implemented | |
| 458 | + via copyField further on in this schema --> | |
| 459 | + <field name="default" type="textgen" indexed="true" stored="false" multiValued="true"/> | |
| 460 | + </fields> | |
| 461 | + | |
| 462 | + <!-- Field to use to determine and enforce document uniqueness. | |
| 463 | + Unless this field is marked with required="false", it will be a required field | |
| 464 | + --> | |
| 465 | + <uniqueKey>uid</uniqueKey> | |
| 466 | + | |
| 467 | + <!-- field for the QueryParser to use when an explicit fieldname is absent --> | |
| 468 | + <defaultSearchField>default</defaultSearchField> | |
| 469 | + | |
| 470 | + <!-- SolrQueryParser configuration: defaultOperator="AND|OR" --> | |
| 471 | + <solrQueryParser defaultOperator="OR"/> | |
| 472 | + | |
| 473 | + <!-- copyField commands copy one field to another at the time a document | |
| 474 | + is added to the index. It's used either to index the same field differently, | |
| 475 | + or to add multiple fields to the same field for easier/faster searching. --> | |
| 476 | + | |
| 477 | + <copyField source="content" dest="default" /> | |
| 478 | + <copyField source="title" dest="default" /> | |
| 479 | + <copyField source="description" dest="default" /> | |
| 480 | + <copyField source="creator" dest="default" /> | |
| 481 | + <copyField source="collaborator" dest="default" /> | |
| 482 | + <copyField source="comment" dest="default" /> | |
| 483 | + <copyField source="keyword" dest="default" /> | |
| 484 | + | |
| 485 | +<!-- Similarity is the scoring routine for each document vs. a query. | |
| 486 | + A custom similarity may be specified here, but the default is fine | |
| 487 | + for most applications. --> | |
| 488 | + <!-- <similarity class="org.apache.lucene.search.DefaultSimilarity"/> --> | |
| 489 | + <!-- ... OR ... | |
| 490 | + Specify a SimilarityFactory class name implementation | |
| 491 | + allowing parameters to be used. | |
| 492 | + --> | |
| 493 | + <!-- | |
| 494 | + <similarity class="com.example.solr.CustomSimilarityFactory"> | |
| 495 | + <str name="paramkey">param value</str> | |
| 496 | + </similarity> | |
| 497 | + --> | |
| 498 | + | |
| 499 | +</schema> | ... | ... |
| ... | ... | @@ -0,0 +1,1040 @@ |
| 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 | + For more details about configurations options that may appear in this | |
| 20 | + file, see http://wiki.apache.org/solr/SolrConfigXml. | |
| 21 | + | |
| 22 | + Specifically, the Solr Config can support XInclude, which may make it easier to manage | |
| 23 | + the configuration. See https://issues.apache.org/jira/browse/SOLR-1167 | |
| 24 | +--> | |
| 25 | +<config> | |
| 26 | + <!-- Set this to 'false' if you want solr to continue working after it has | |
| 27 | + encountered an severe configuration error. In a production environment, | |
| 28 | + you may want solr to keep working even if one handler is mis-configured. | |
| 29 | + | |
| 30 | + You may also set this to false using by setting the system property: | |
| 31 | + -Dsolr.abortOnConfigurationError=false | |
| 32 | + --> | |
| 33 | + <abortOnConfigurationError>${solr.abortOnConfigurationError:true}</abortOnConfigurationError> | |
| 34 | + | |
| 35 | + <!-- lib directives can be used to instruct Solr to load an Jars identified | |
| 36 | + and use them to resolve any "plugins" specified in your solrconfig.xml or | |
| 37 | + schema.xml (ie: Analyzers, Request Handlers, etc...). | |
| 38 | + | |
| 39 | + All directories and paths are resolved relative the instanceDir. | |
| 40 | + | |
| 41 | + If a "./lib" directory exists in your instanceDir, all files found in it | |
| 42 | + are included as if you had used the following syntax... | |
| 43 | + | |
| 44 | + <lib dir="./lib" /> | |
| 45 | + --> | |
| 46 | + <!-- A dir option by itself adds any files found in the directory to the | |
| 47 | + classpath, this is useful for including all jars in a directory. | |
| 48 | + --> | |
| 49 | + <!--lib dir="../../contrib/extraction/lib" /--> | |
| 50 | + <!-- When a regex is specified in addition to a directory, only the files in that | |
| 51 | + directory which completely match the regex (anchored on both ends) | |
| 52 | + will be included. | |
| 53 | + --> | |
| 54 | + <!--lib dir="../../dist/" regex="apache-solr-cell-\d.*\.jar" /> | |
| 55 | + <lib dir="../../dist/" regex="apache-solr-clustering-\d.*\.jar" /--> | |
| 56 | + <!-- If a dir option (with or without a regex) is used and nothing is found | |
| 57 | + that matches, it will be ignored | |
| 58 | + --> | |
| 59 | + <!--lib dir="../../contrib/clustering/lib/downloads/" /> | |
| 60 | + <lib dir="../../contrib/clustering/lib/" /> | |
| 61 | + <lib dir="/total/crap/dir/ignored" /--> | |
| 62 | + <!-- an exact path can be used to specify a specific file. This will cause | |
| 63 | + a serious error to be logged if it can't be loaded. | |
| 64 | + <lib path="../a-jar-that-does-not-exist.jar" /> | |
| 65 | + --> | |
| 66 | + | |
| 67 | + | |
| 68 | + <!-- Used to specify an alternate directory to hold all index data | |
| 69 | + other than the default ./data under the Solr home. | |
| 70 | + If replication is in use, this should match the replication configuration. --> | |
| 71 | + <dataDir>/var/lib/solr/data</dataDir> | |
| 72 | + | |
| 73 | + | |
| 74 | + <!-- WARNING: this <indexDefaults> section only provides defaults for index writers | |
| 75 | + in general. See also the <mainIndex> section after that when changing parameters | |
| 76 | + for Solr's main Lucene index. --> | |
| 77 | + <indexDefaults> | |
| 78 | + <!-- Values here affect all index writers and act as a default unless overridden. --> | |
| 79 | + <useCompoundFile>false</useCompoundFile> | |
| 80 | + | |
| 81 | + <mergeFactor>10</mergeFactor> | |
| 82 | + <!-- If both ramBufferSizeMB and maxBufferedDocs is set, then Lucene will flush | |
| 83 | + based on whichever limit is hit first. --> | |
| 84 | + <!--<maxBufferedDocs>1000</maxBufferedDocs>--> | |
| 85 | + | |
| 86 | + <!-- Sets the amount of RAM that may be used by Lucene indexing | |
| 87 | + for buffering added documents and deletions before they are | |
| 88 | + flushed to the Directory. --> | |
| 89 | + <ramBufferSizeMB>32</ramBufferSizeMB> | |
| 90 | + <!-- <maxMergeDocs>2147483647</maxMergeDocs> --> | |
| 91 | + <maxFieldLength>10000</maxFieldLength> | |
| 92 | + <writeLockTimeout>1000</writeLockTimeout> | |
| 93 | + <commitLockTimeout>10000</commitLockTimeout> | |
| 94 | + | |
| 95 | + <!-- | |
| 96 | + Expert: Turn on Lucene's auto commit capability. This causes intermediate | |
| 97 | + segment flushes to write a new lucene index descriptor, enabling it to be | |
| 98 | + opened by an external IndexReader. This can greatly slow down indexing | |
| 99 | + speed. NOTE: Despite the name, this value does not have any relation to | |
| 100 | + Solr's autoCommit functionality | |
| 101 | + --> | |
| 102 | + <!--<luceneAutoCommit>false</luceneAutoCommit>--> | |
| 103 | + | |
| 104 | + <!-- | |
| 105 | + Expert: The Merge Policy in Lucene controls how merging is handled by | |
| 106 | + Lucene. The default in 2.3 is the LogByteSizeMergePolicy, previous | |
| 107 | + versions used LogDocMergePolicy. | |
| 108 | + | |
| 109 | + LogByteSizeMergePolicy chooses segments to merge based on their size. The | |
| 110 | + Lucene 2.2 default, LogDocMergePolicy chose when to merge based on number | |
| 111 | + of documents | |
| 112 | + | |
| 113 | + Other implementations of MergePolicy must have a no-argument constructor | |
| 114 | + --> | |
| 115 | + <!--<mergePolicy class="org.apache.lucene.index.LogByteSizeMergePolicy"/>--> | |
| 116 | + | |
| 117 | + <!-- | |
| 118 | + Expert: | |
| 119 | + The Merge Scheduler in Lucene controls how merges are performed. The | |
| 120 | + ConcurrentMergeScheduler (Lucene 2.3 default) can perform merges in the | |
| 121 | + background using separate threads. The SerialMergeScheduler (Lucene 2.2 | |
| 122 | + default) does not. | |
| 123 | + --> | |
| 124 | + <!--<mergeScheduler class="org.apache.lucene.index.ConcurrentMergeScheduler"/>--> | |
| 125 | + | |
| 126 | + | |
| 127 | + <!-- | |
| 128 | + This option specifies which Lucene LockFactory implementation to use. | |
| 129 | + | |
| 130 | + single = SingleInstanceLockFactory - suggested for a read-only index | |
| 131 | + or when there is no possibility of another process trying | |
| 132 | + to modify the index. | |
| 133 | + native = NativeFSLockFactory - uses OS native file locking | |
| 134 | + simple = SimpleFSLockFactory - uses a plain file for locking | |
| 135 | + | |
| 136 | + (For backwards compatibility with Solr 1.2, 'simple' is the default | |
| 137 | + if not specified.) | |
| 138 | + --> | |
| 139 | + <lockType>native</lockType> | |
| 140 | + <!-- | |
| 141 | + Expert: | |
| 142 | + Controls how often Lucene loads terms into memory --> | |
| 143 | + <!--<termIndexInterval>256</termIndexInterval>--> | |
| 144 | + </indexDefaults> | |
| 145 | + | |
| 146 | + <mainIndex> | |
| 147 | + <!-- options specific to the main on-disk lucene index --> | |
| 148 | + <useCompoundFile>false</useCompoundFile> | |
| 149 | + <ramBufferSizeMB>32</ramBufferSizeMB> | |
| 150 | + <mergeFactor>10</mergeFactor> | |
| 151 | + <!-- Deprecated --> | |
| 152 | + <!--<maxBufferedDocs>1000</maxBufferedDocs>--> | |
| 153 | + <!--<maxMergeDocs>2147483647</maxMergeDocs>--> | |
| 154 | + | |
| 155 | + <!-- inherit from indexDefaults <maxFieldLength>10000</maxFieldLength> --> | |
| 156 | + | |
| 157 | + <!-- If true, unlock any held write or commit locks on startup. | |
| 158 | + This defeats the locking mechanism that allows multiple | |
| 159 | + processes to safely access a lucene index, and should be | |
| 160 | + used with care. | |
| 161 | + This is not needed if lock type is 'none' or 'single' | |
| 162 | + --> | |
| 163 | + <unlockOnStartup>false</unlockOnStartup> | |
| 164 | + | |
| 165 | + <!-- If true, IndexReaders will be reopened (often more efficient) instead | |
| 166 | + of closed and then opened. --> | |
| 167 | + <reopenReaders>true</reopenReaders> | |
| 168 | + | |
| 169 | + <!-- | |
| 170 | + Expert: | |
| 171 | + Controls how often Lucene loads terms into memory. Default is 128 and is likely good for most everyone. --> | |
| 172 | + <!--<termIndexInterval>256</termIndexInterval>--> | |
| 173 | + | |
| 174 | + <!-- | |
| 175 | + Custom deletion policies can specified here. The class must | |
| 176 | + implement org.apache.lucene.index.IndexDeletionPolicy. | |
| 177 | + | |
| 178 | + http://lucene.apache.org/java/2_3_2/api/org/apache/lucene/index/IndexDeletionPolicy.html | |
| 179 | + | |
| 180 | + The standard Solr IndexDeletionPolicy implementation supports deleting | |
| 181 | + index commit points on number of commits, age of commit point and | |
| 182 | + optimized status. | |
| 183 | + | |
| 184 | + The latest commit point should always be preserved regardless | |
| 185 | + of the criteria. | |
| 186 | + --> | |
| 187 | + <deletionPolicy class="solr.SolrDeletionPolicy"> | |
| 188 | + <!-- The number of commit points to be kept --> | |
| 189 | + <str name="maxCommitsToKeep">1</str> | |
| 190 | + <!-- The number of optimized commit points to be kept --> | |
| 191 | + <str name="maxOptimizedCommitsToKeep">0</str> | |
| 192 | + <!-- | |
| 193 | + Delete all commit points once they have reached the given age. | |
| 194 | + Supports DateMathParser syntax e.g. | |
| 195 | + | |
| 196 | + <str name="maxCommitAge">30MINUTES</str> | |
| 197 | + <str name="maxCommitAge">1DAY</str> | |
| 198 | + --> | |
| 199 | + </deletionPolicy> | |
| 200 | + | |
| 201 | + <!-- To aid in advanced debugging, you may turn on IndexWriter debug logging. | |
| 202 | + Setting to true will set the file that the underlying Lucene IndexWriter | |
| 203 | + will write its debug infostream to. --> | |
| 204 | + <infoStream file="INFOSTREAM.txt">false</infoStream> | |
| 205 | + | |
| 206 | + </mainIndex> | |
| 207 | + | |
| 208 | + <!-- Enables JMX if and only if an existing MBeanServer is found, use this | |
| 209 | + if you want to configure JMX through JVM parameters. Remove this to disable | |
| 210 | + exposing Solr configuration and statistics to JMX. | |
| 211 | + | |
| 212 | + If you want to connect to a particular server, specify the agentId | |
| 213 | + e.g. <jmx agentId="myAgent" /> | |
| 214 | + | |
| 215 | + If you want to start a new MBeanServer, specify the serviceUrl | |
| 216 | + e.g <jmx serviceUrl="service:jmx:rmi:///jndi/rmi://localhost:9999/solr"/> | |
| 217 | + | |
| 218 | + For more details see http://wiki.apache.org/solr/SolrJmx | |
| 219 | + --> | |
| 220 | + <jmx /> | |
| 221 | + | |
| 222 | + <!-- the default high-performance update handler --> | |
| 223 | + <updateHandler class="solr.DirectUpdateHandler2"> | |
| 224 | + <!-- A prefix of "solr." for class names is an alias that | |
| 225 | + causes solr to search appropriate packages, including | |
| 226 | + org.apache.solr.(search|update|request|core|analysis) | |
| 227 | + --> | |
| 228 | + | |
| 229 | + <!-- Perform a <commit/> automatically under certain conditions: | |
| 230 | + maxDocs - number of updates since last commit is greater than this | |
| 231 | + maxTime - oldest uncommited update (in ms) is this long ago | |
| 232 | + Instead of enabling autoCommit, consider using "commitWithin" | |
| 233 | + when adding documents. http://wiki.apache.org/solr/UpdateXmlMessages | |
| 234 | + <autoCommit> | |
| 235 | + <maxDocs>10000</maxDocs> | |
| 236 | + <maxTime>1000</maxTime> | |
| 237 | + </autoCommit> | |
| 238 | + --> | |
| 239 | + | |
| 240 | + | |
| 241 | + <!-- The RunExecutableListener executes an external command from a | |
| 242 | + hook such as postCommit or postOptimize. | |
| 243 | + exe - the name of the executable to run | |
| 244 | + dir - dir to use as the current working directory. default="." | |
| 245 | + wait - the calling thread waits until the executable returns. default="true" | |
| 246 | + args - the arguments to pass to the program. default=nothing | |
| 247 | + env - environment variables to set. default=nothing | |
| 248 | + --> | |
| 249 | + <!-- A postCommit event is fired after every commit or optimize command | |
| 250 | + <listener event="postCommit" class="solr.RunExecutableListener"> | |
| 251 | + <str name="exe">solr/bin/snapshooter</str> | |
| 252 | + <str name="dir">.</str> | |
| 253 | + <bool name="wait">true</bool> | |
| 254 | + <arr name="args"> <str>arg1</str> <str>arg2</str> </arr> | |
| 255 | + <arr name="env"> <str>MYVAR=val1</str> </arr> | |
| 256 | + </listener> | |
| 257 | + --> | |
| 258 | + <!-- A postOptimize event is fired only after every optimize command | |
| 259 | + <listener event="postOptimize" class="solr.RunExecutableListener"> | |
| 260 | + <str name="exe">snapshooter</str> | |
| 261 | + <str name="dir">solr/bin</str> | |
| 262 | + <bool name="wait">true</bool> | |
| 263 | + </listener> | |
| 264 | + --> | |
| 265 | + | |
| 266 | + </updateHandler> | |
| 267 | + | |
| 268 | + <!-- Use the following format to specify a custom IndexReaderFactory - allows for alternate | |
| 269 | + IndexReader implementations. | |
| 270 | + | |
| 271 | + ** Experimental Feature ** | |
| 272 | + Please note - Using a custom IndexReaderFactory may prevent certain other features | |
| 273 | + from working. The API to IndexReaderFactory may change without warning or may even | |
| 274 | + be removed from future releases if the problems cannot be resolved. | |
| 275 | + | |
| 276 | + ** Features that may not work with custom IndexReaderFactory ** | |
| 277 | + The ReplicationHandler assumes a disk-resident index. Using a custom | |
| 278 | + IndexReader implementation may cause incompatibility with ReplicationHandler and | |
| 279 | + may cause replication to not work correctly. See SOLR-1366 for details. | |
| 280 | + | |
| 281 | + <indexReaderFactory name="IndexReaderFactory" class="package.class"> | |
| 282 | + Parameters as required by the implementation | |
| 283 | + </indexReaderFactory > | |
| 284 | + --> | |
| 285 | + <!-- To set the termInfosIndexDivisor, do this: --> | |
| 286 | + <!--<indexReaderFactory name="IndexReaderFactory" class="org.apache.solr.core.StandardIndexReaderFactory"> | |
| 287 | + <int name="termInfosIndexDivisor">12</int> | |
| 288 | + </indexReaderFactory >--> | |
| 289 | + | |
| 290 | + | |
| 291 | + <query> | |
| 292 | + <!-- Maximum number of clauses in a boolean query... in the past, this affected | |
| 293 | + range or prefix queries that expanded to big boolean queries - built in Solr | |
| 294 | + query parsers no longer create queries with this limitation. | |
| 295 | + An exception is thrown if exceeded. --> | |
| 296 | + <maxBooleanClauses>1024</maxBooleanClauses> | |
| 297 | + | |
| 298 | + | |
| 299 | + <!-- There are two implementations of cache available for Solr, | |
| 300 | + LRUCache, based on a synchronized LinkedHashMap, and | |
| 301 | + FastLRUCache, based on a ConcurrentHashMap. FastLRUCache has faster gets | |
| 302 | + and slower puts in single threaded operation and thus is generally faster | |
| 303 | + than LRUCache when the hit ratio of the cache is high (> 75%), and may be | |
| 304 | + faster under other scenarios on multi-cpu systems. --> | |
| 305 | + <!-- Cache used by SolrIndexSearcher for filters (DocSets), | |
| 306 | + unordered sets of *all* documents that match a query. | |
| 307 | + When a new searcher is opened, its caches may be prepopulated | |
| 308 | + or "autowarmed" using data from caches in the old searcher. | |
| 309 | + autowarmCount is the number of items to prepopulate. For LRUCache, | |
| 310 | + the autowarmed items will be the most recently accessed items. | |
| 311 | + Parameters: | |
| 312 | + class - the SolrCache implementation LRUCache or FastLRUCache | |
| 313 | + size - the maximum number of entries in the cache | |
| 314 | + initialSize - the initial capacity (number of entries) of | |
| 315 | + the cache. (seel java.util.HashMap) | |
| 316 | + autowarmCount - the number of entries to prepopulate from | |
| 317 | + and old cache. | |
| 318 | + --> | |
| 319 | + <filterCache | |
| 320 | + class="solr.FastLRUCache" | |
| 321 | + size="512" | |
| 322 | + initialSize="512" | |
| 323 | + autowarmCount="0"/> | |
| 324 | + | |
| 325 | + <!-- Cache used to hold field values that are quickly accessible | |
| 326 | + by document id. The fieldValueCache is created by default | |
| 327 | + even if not configured here. | |
| 328 | + <fieldValueCache | |
| 329 | + class="solr.FastLRUCache" | |
| 330 | + size="512" | |
| 331 | + autowarmCount="128" | |
| 332 | + showItems="32" | |
| 333 | + /> | |
| 334 | + --> | |
| 335 | + | |
| 336 | + <!-- queryResultCache caches results of searches - ordered lists of | |
| 337 | + document ids (DocList) based on a query, a sort, and the range | |
| 338 | + of documents requested. --> | |
| 339 | + <queryResultCache | |
| 340 | + class="solr.LRUCache" | |
| 341 | + size="512" | |
| 342 | + initialSize="512" | |
| 343 | + autowarmCount="0"/> | |
| 344 | + | |
| 345 | + <!-- documentCache caches Lucene Document objects (the stored fields for each document). | |
| 346 | + Since Lucene internal document ids are transient, this cache will not be autowarmed. --> | |
| 347 | + <documentCache | |
| 348 | + class="solr.LRUCache" | |
| 349 | + size="512" | |
| 350 | + initialSize="512" | |
| 351 | + autowarmCount="0"/> | |
| 352 | + | |
| 353 | + <!-- If true, stored fields that are not requested will be loaded lazily. | |
| 354 | + This can result in a significant speed improvement if the usual case is to | |
| 355 | + not load all stored fields, especially if the skipped fields are large | |
| 356 | + compressed text fields. | |
| 357 | + --> | |
| 358 | + <enableLazyFieldLoading>true</enableLazyFieldLoading> | |
| 359 | + | |
| 360 | + <!-- Example of a generic cache. These caches may be accessed by name | |
| 361 | + through SolrIndexSearcher.getCache(),cacheLookup(), and cacheInsert(). | |
| 362 | + The purpose is to enable easy caching of user/application level data. | |
| 363 | + The regenerator argument should be specified as an implementation | |
| 364 | + of solr.search.CacheRegenerator if autowarming is desired. --> | |
| 365 | + <!-- | |
| 366 | + <cache name="myUserCache" | |
| 367 | + class="solr.LRUCache" | |
| 368 | + size="4096" | |
| 369 | + initialSize="1024" | |
| 370 | + autowarmCount="1024" | |
| 371 | + regenerator="org.mycompany.mypackage.MyRegenerator" | |
| 372 | + /> | |
| 373 | + --> | |
| 374 | + | |
| 375 | + <!-- An optimization that attempts to use a filter to satisfy a search. | |
| 376 | + If the requested sort does not include score, then the filterCache | |
| 377 | + will be checked for a filter matching the query. If found, the filter | |
| 378 | + will be used as the source of document ids, and then the sort will be | |
| 379 | + applied to that. | |
| 380 | + <useFilterForSortedQuery>true</useFilterForSortedQuery> | |
| 381 | + --> | |
| 382 | + | |
| 383 | + <!-- An optimization for use with the queryResultCache. When a search | |
| 384 | + is requested, a superset of the requested number of document ids | |
| 385 | + are collected. For example, if a search for a particular query | |
| 386 | + requests matching documents 10 through 19, and queryWindowSize is 50, | |
| 387 | + then documents 0 through 49 will be collected and cached. Any further | |
| 388 | + requests in that range can be satisfied via the cache. --> | |
| 389 | + <queryResultWindowSize>20</queryResultWindowSize> | |
| 390 | + | |
| 391 | + <!-- Maximum number of documents to cache for any entry in the | |
| 392 | + queryResultCache. --> | |
| 393 | + <queryResultMaxDocsCached>200</queryResultMaxDocsCached> | |
| 394 | + | |
| 395 | + <!-- a newSearcher event is fired whenever a new searcher is being prepared | |
| 396 | + and there is a current searcher handling requests (aka registered). | |
| 397 | + It can be used to prime certain caches to prevent long request times for | |
| 398 | + certain requests. | |
| 399 | + --> | |
| 400 | + <!-- QuerySenderListener takes an array of NamedList and executes a | |
| 401 | + local query request for each NamedList in sequence. --> | |
| 402 | + <listener event="newSearcher" class="solr.QuerySenderListener"> | |
| 403 | + <arr name="queries"> | |
| 404 | + <!-- | |
| 405 | + <lst> <str name="q">solr</str> <str name="start">0</str> <str name="rows">10</str> </lst> | |
| 406 | + <lst> <str name="q">rocks</str> <str name="start">0</str> <str name="rows">10</str> </lst> | |
| 407 | + <lst><str name="q">static newSearcher warming query from solrconfig.xml</str></lst> | |
| 408 | + --> | |
| 409 | + </arr> | |
| 410 | + </listener> | |
| 411 | + | |
| 412 | + <!-- a firstSearcher event is fired whenever a new searcher is being | |
| 413 | + prepared but there is no current registered searcher to handle | |
| 414 | + requests or to gain autowarming data from. --> | |
| 415 | + <listener event="firstSearcher" class="solr.QuerySenderListener"> | |
| 416 | + <arr name="queries"> | |
| 417 | + <lst> <str name="q">solr rocks</str><str name="start">0</str><str name="rows">10</str></lst> | |
| 418 | + <lst><str name="q">static firstSearcher warming query from solrconfig.xml</str></lst> | |
| 419 | + </arr> | |
| 420 | + </listener> | |
| 421 | + | |
| 422 | + <!-- If a search request comes in and there is no current registered searcher, | |
| 423 | + then immediately register the still warming searcher and use it. If | |
| 424 | + "false" then all requests will block until the first searcher is done | |
| 425 | + warming. --> | |
| 426 | + <useColdSearcher>false</useColdSearcher> | |
| 427 | + | |
| 428 | + <!-- Maximum number of searchers that may be warming in the background | |
| 429 | + concurrently. An error is returned if this limit is exceeded. Recommend | |
| 430 | + 1-2 for read-only slaves, higher for masters w/o cache warming. --> | |
| 431 | + <maxWarmingSearchers>2</maxWarmingSearchers> | |
| 432 | + | |
| 433 | + </query> | |
| 434 | + | |
| 435 | + <!-- | |
| 436 | + Let the dispatch filter handler /select?qt=XXX | |
| 437 | + handleSelect=true will use consistent error handling for /select and /update | |
| 438 | + handleSelect=false will use solr1.1 style error formatting | |
| 439 | + --> | |
| 440 | + <requestDispatcher handleSelect="true" > | |
| 441 | + <!--Make sure your system has some authentication before enabling remote streaming! --> | |
| 442 | + <requestParsers enableRemoteStreaming="true" multipartUploadLimitInKB="2048000" /> | |
| 443 | + | |
| 444 | + <!-- Set HTTP caching related parameters (for proxy caches and clients). | |
| 445 | + | |
| 446 | + To get the behaviour of Solr 1.2 (ie: no caching related headers) | |
| 447 | + use the never304="true" option and do not specify a value for | |
| 448 | + <cacheControl> | |
| 449 | + --> | |
| 450 | + <!-- <httpCaching never304="true"> --> | |
| 451 | + <httpCaching lastModifiedFrom="openTime" | |
| 452 | + etagSeed="Solr"> | |
| 453 | + <!-- lastModFrom="openTime" is the default, the Last-Modified value | |
| 454 | + (and validation against If-Modified-Since requests) will all be | |
| 455 | + relative to when the current Searcher was opened. | |
| 456 | + You can change it to lastModFrom="dirLastMod" if you want the | |
| 457 | + value to exactly corrispond to when the physical index was last | |
| 458 | + modified. | |
| 459 | + | |
| 460 | + etagSeed="..." is an option you can change to force the ETag | |
| 461 | + header (and validation against If-None-Match requests) to be | |
| 462 | + differnet even if the index has not changed (ie: when making | |
| 463 | + significant changes to your config file) | |
| 464 | + | |
| 465 | + lastModifiedFrom and etagSeed are both ignored if you use the | |
| 466 | + never304="true" option. | |
| 467 | + --> | |
| 468 | + <!-- If you include a <cacheControl> directive, it will be used to | |
| 469 | + generate a Cache-Control header, as well as an Expires header | |
| 470 | + if the value contains "max-age=" | |
| 471 | + | |
| 472 | + By default, no Cache-Control header is generated. | |
| 473 | + | |
| 474 | + You can use the <cacheControl> option even if you have set | |
| 475 | + never304="true" | |
| 476 | + --> | |
| 477 | + <!-- <cacheControl>max-age=30, public</cacheControl> --> | |
| 478 | + </httpCaching> | |
| 479 | + </requestDispatcher> | |
| 480 | + | |
| 481 | + | |
| 482 | + <!-- requestHandler plugins... incoming queries will be dispatched to the | |
| 483 | + correct handler based on the path or the qt (query type) param. | |
| 484 | + Names starting with a '/' are accessed with the a path equal to the | |
| 485 | + registered name. Names without a leading '/' are accessed with: | |
| 486 | + http://host/app/select?qt=name | |
| 487 | + If no qt is defined, the requestHandler that declares default="true" | |
| 488 | + will be used. | |
| 489 | + --> | |
| 490 | + <requestHandler name="standard" class="solr.SearchHandler" default="true"> | |
| 491 | + <!-- default values for query parameters --> | |
| 492 | + <lst name="defaults"> | |
| 493 | + <str name="echoParams">explicit</str> | |
| 494 | + <!-- | |
| 495 | + <int name="rows">10</int> | |
| 496 | + <str name="fl">*</str> | |
| 497 | + <str name="version">2.1</str> | |
| 498 | + --> | |
| 499 | + </lst> | |
| 500 | + </requestHandler> | |
| 501 | + | |
| 502 | +<!-- Please refer to http://wiki.apache.org/solr/SolrReplication for details on configuring replication --> | |
| 503 | +<!-- remove the <lst name="master"> section if this is just a slave --> | |
| 504 | +<!-- remove the <lst name="slave"> section if this is just a master --> | |
| 505 | +<!-- | |
| 506 | +<requestHandler name="/replication" class="solr.ReplicationHandler" > | |
| 507 | + <lst name="master"> | |
| 508 | + <str name="replicateAfter">commit</str> | |
| 509 | + <str name="replicateAfter">startup</str> | |
| 510 | + <str name="confFiles">schema.xml,stopwords.txt</str> | |
| 511 | + </lst> | |
| 512 | + <lst name="slave"> | |
| 513 | + <str name="masterUrl">http://localhost:8983/solr/replication</str> | |
| 514 | + <str name="pollInterval">00:00:60</str> | |
| 515 | + </lst> | |
| 516 | +</requestHandler>--> | |
| 517 | + | |
| 518 | + <!-- DisMaxRequestHandler allows easy searching across multiple fields | |
| 519 | + for simple user-entered phrases. It's implementation is now | |
| 520 | + just the standard SearchHandler with a default query type | |
| 521 | + of "dismax". | |
| 522 | + see http://wiki.apache.org/solr/DisMaxRequestHandler | |
| 523 | + --> | |
| 524 | + <requestHandler name="dismax" class="solr.SearchHandler" > | |
| 525 | + <lst name="defaults"> | |
| 526 | + <str name="defType">dismax</str> | |
| 527 | + <str name="echoParams">explicit</str> | |
| 528 | + <float name="tie">0.01</float> | |
| 529 | + <str name="qf"> | |
| 530 | + text^0.5 features^1.0 name^1.2 sku^1.5 id^10.0 manu^1.1 cat^1.4 | |
| 531 | + </str> | |
| 532 | + <str name="pf"> | |
| 533 | + text^0.2 features^1.1 name^1.5 manu^1.4 manu_exact^1.9 | |
| 534 | + </str> | |
| 535 | + <str name="bf"> | |
| 536 | + popularity^0.5 recip(price,1,1000,1000)^0.3 | |
| 537 | + </str> | |
| 538 | + <str name="fl"> | |
| 539 | + id,name,price,score | |
| 540 | + </str> | |
| 541 | + <str name="mm"> | |
| 542 | + 2<-1 5<-2 6<90% | |
| 543 | + </str> | |
| 544 | + <int name="ps">100</int> | |
| 545 | + <str name="q.alt">*:*</str> | |
| 546 | + <!-- example highlighter config, enable per-query with hl=true --> | |
| 547 | + <str name="hl.fl">text features name</str> | |
| 548 | + <!-- for this field, we want no fragmenting, just highlighting --> | |
| 549 | + <str name="f.name.hl.fragsize">0</str> | |
| 550 | + <!-- instructs Solr to return the field itself if no query terms are | |
| 551 | + found --> | |
| 552 | + <str name="f.name.hl.alternateField">name</str> | |
| 553 | + <str name="f.text.hl.fragmenter">regex</str> <!-- defined below --> | |
| 554 | + </lst> | |
| 555 | + </requestHandler> | |
| 556 | + | |
| 557 | + <!-- Note how you can register the same handler multiple times with | |
| 558 | + different names (and different init parameters) | |
| 559 | + --> | |
| 560 | + <requestHandler name="partitioned" class="solr.SearchHandler" > | |
| 561 | + <lst name="defaults"> | |
| 562 | + <str name="defType">dismax</str> | |
| 563 | + <str name="echoParams">explicit</str> | |
| 564 | + <str name="qf">text^0.5 features^1.0 name^1.2 sku^1.5 id^10.0</str> | |
| 565 | + <str name="mm">2<-1 5<-2 6<90%</str> | |
| 566 | + <!-- This is an example of using Date Math to specify a constantly | |
| 567 | + moving date range in a config... | |
| 568 | + --> | |
| 569 | + <str name="bq">incubationdate_dt:[* TO NOW/DAY-1MONTH]^2.2</str> | |
| 570 | + </lst> | |
| 571 | + <!-- In addition to defaults, "appends" params can be specified | |
| 572 | + to identify values which should be appended to the list of | |
| 573 | + multi-val params from the query (or the existing "defaults"). | |
| 574 | + | |
| 575 | + In this example, the param "fq=instock:true" will be appended to | |
| 576 | + any query time fq params the user may specify, as a mechanism for | |
| 577 | + partitioning the index, independent of any user selected filtering | |
| 578 | + that may also be desired (perhaps as a result of faceted searching). | |
| 579 | + | |
| 580 | + NOTE: there is *absolutely* nothing a client can do to prevent these | |
| 581 | + "appends" values from being used, so don't use this mechanism | |
| 582 | + unless you are sure you always want it. | |
| 583 | + --> | |
| 584 | + <lst name="appends"> | |
| 585 | + <str name="fq">inStock:true</str> | |
| 586 | + </lst> | |
| 587 | + <!-- "invariants" are a way of letting the Solr maintainer lock down | |
| 588 | + the options available to Solr clients. Any params values | |
| 589 | + specified here are used regardless of what values may be specified | |
| 590 | + in either the query, the "defaults", or the "appends" params. | |
| 591 | + | |
| 592 | + In this example, the facet.field and facet.query params are fixed, | |
| 593 | + limiting the facets clients can use. Faceting is not turned on by | |
| 594 | + default - but if the client does specify facet=true in the request, | |
| 595 | + these are the only facets they will be able to see counts for; | |
| 596 | + regardless of what other facet.field or facet.query params they | |
| 597 | + may specify. | |
| 598 | + | |
| 599 | + NOTE: there is *absolutely* nothing a client can do to prevent these | |
| 600 | + "invariants" values from being used, so don't use this mechanism | |
| 601 | + unless you are sure you always want it. | |
| 602 | + --> | |
| 603 | + <lst name="invariants"> | |
| 604 | + <str name="facet.field">cat</str> | |
| 605 | + <str name="facet.field">manu_exact</str> | |
| 606 | + <str name="facet.query">price:[* TO 500]</str> | |
| 607 | + <str name="facet.query">price:[500 TO *]</str> | |
| 608 | + </lst> | |
| 609 | + </requestHandler> | |
| 610 | + | |
| 611 | + | |
| 612 | + <!-- | |
| 613 | + Search components are registered to SolrCore and used by Search Handlers | |
| 614 | + | |
| 615 | + By default, the following components are avaliable: | |
| 616 | + | |
| 617 | + <searchComponent name="query" class="org.apache.solr.handler.component.QueryComponent" /> | |
| 618 | + <searchComponent name="facet" class="org.apache.solr.handler.component.FacetComponent" /> | |
| 619 | + <searchComponent name="mlt" class="org.apache.solr.handler.component.MoreLikeThisComponent" /> | |
| 620 | + <searchComponent name="highlight" class="org.apache.solr.handler.component.HighlightComponent" /> | |
| 621 | + <searchComponent name="stats" class="org.apache.solr.handler.component.StatsComponent" /> | |
| 622 | + <searchComponent name="debug" class="org.apache.solr.handler.component.DebugComponent" /> | |
| 623 | + | |
| 624 | + Default configuration in a requestHandler would look like: | |
| 625 | + <arr name="components"> | |
| 626 | + <str>query</str> | |
| 627 | + <str>facet</str> | |
| 628 | + <str>mlt</str> | |
| 629 | + <str>highlight</str> | |
| 630 | + <str>stats</str> | |
| 631 | + <str>debug</str> | |
| 632 | + </arr> | |
| 633 | + | |
| 634 | + If you register a searchComponent to one of the standard names, that will be used instead. | |
| 635 | + To insert components before or after the 'standard' components, use: | |
| 636 | + | |
| 637 | + <arr name="first-components"> | |
| 638 | + <str>myFirstComponentName</str> | |
| 639 | + </arr> | |
| 640 | + | |
| 641 | + <arr name="last-components"> | |
| 642 | + <str>myLastComponentName</str> | |
| 643 | + </arr> | |
| 644 | + --> | |
| 645 | + | |
| 646 | + <!-- The spell check component can return a list of alternative spelling | |
| 647 | + suggestions. --> | |
| 648 | + <searchComponent name="spellcheck" class="solr.SpellCheckComponent"> | |
| 649 | + | |
| 650 | + <str name="queryAnalyzerFieldType">textSpell</str> | |
| 651 | + | |
| 652 | + <lst name="spellchecker"> | |
| 653 | + <str name="name">default</str> | |
| 654 | + <str name="field">name</str> | |
| 655 | + <str name="spellcheckIndexDir">./spellchecker</str> | |
| 656 | + </lst> | |
| 657 | + | |
| 658 | + <!-- a spellchecker that uses a different distance measure | |
| 659 | + <lst name="spellchecker"> | |
| 660 | + <str name="name">jarowinkler</str> | |
| 661 | + <str name="field">spell</str> | |
| 662 | + <str name="distanceMeasure">org.apache.lucene.search.spell.JaroWinklerDistance</str> | |
| 663 | + <str name="spellcheckIndexDir">./spellchecker2</str> | |
| 664 | + </lst> | |
| 665 | + --> | |
| 666 | + | |
| 667 | + <!-- a file based spell checker | |
| 668 | + <lst name="spellchecker"> | |
| 669 | + <str name="classname">solr.FileBasedSpellChecker</str> | |
| 670 | + <str name="name">file</str> | |
| 671 | + <str name="sourceLocation">spellings.txt</str> | |
| 672 | + <str name="characterEncoding">UTF-8</str> | |
| 673 | + <str name="spellcheckIndexDir">./spellcheckerFile</str> | |
| 674 | + </lst> | |
| 675 | + --> | |
| 676 | + </searchComponent> | |
| 677 | + | |
| 678 | + <!-- A request handler utilizing the spellcheck component. | |
| 679 | + ############################################################################# | |
| 680 | + NOTE: This is purely as an example. The whole purpose of the | |
| 681 | + SpellCheckComponent is to hook it into the request handler that handles (i.e. | |
| 682 | + the standard or dismax SearchHandler) queries such that a separate request is | |
| 683 | + not needed to get suggestions. | |
| 684 | + | |
| 685 | + IN OTHER WORDS, THERE IS REALLY GOOD CHANCE THE SETUP BELOW IS NOT WHAT YOU | |
| 686 | + WANT FOR YOUR PRODUCTION SYSTEM! | |
| 687 | + ############################################################################# | |
| 688 | + --> | |
| 689 | + <requestHandler name="/spell" class="solr.SearchHandler" lazy="true"> | |
| 690 | + <lst name="defaults"> | |
| 691 | + <!-- omp = Only More Popular --> | |
| 692 | + <str name="spellcheck.onlyMorePopular">false</str> | |
| 693 | + <!-- exr = Extended Results --> | |
| 694 | + <str name="spellcheck.extendedResults">false</str> | |
| 695 | + <!-- The number of suggestions to return --> | |
| 696 | + <str name="spellcheck.count">1</str> | |
| 697 | + </lst> | |
| 698 | + <arr name="last-components"> | |
| 699 | + <str>spellcheck</str> | |
| 700 | + </arr> | |
| 701 | + </requestHandler> | |
| 702 | + | |
| 703 | + <searchComponent name="tvComponent" class="org.apache.solr.handler.component.TermVectorComponent"/> | |
| 704 | + <!-- A Req Handler for working with the tvComponent. This is purely as an example. | |
| 705 | + You will likely want to add the component to your already specified request handlers. --> | |
| 706 | + <requestHandler name="tvrh" class="org.apache.solr.handler.component.SearchHandler"> | |
| 707 | + <lst name="defaults"> | |
| 708 | + <bool name="tv">true</bool> | |
| 709 | + </lst> | |
| 710 | + <arr name="last-components"> | |
| 711 | + <str>tvComponent</str> | |
| 712 | + </arr> | |
| 713 | + </requestHandler> | |
| 714 | + | |
| 715 | + <!-- Clustering Component | |
| 716 | + http://wiki.apache.org/solr/ClusteringComponent | |
| 717 | + This relies on third party jars which are not included in the release. | |
| 718 | + To use this component (and the "/clustering" handler) | |
| 719 | + Those jars will need to be downloaded, and you'll need to set the | |
| 720 | + solr.cluster.enabled system property when running solr... | |
| 721 | + java -Dsolr.clustering.enabled=true -jar start.jar | |
| 722 | + --> | |
| 723 | + <searchComponent | |
| 724 | + name="clusteringComponent" | |
| 725 | + enable="${solr.clustering.enabled:false}" | |
| 726 | + class="org.apache.solr.handler.clustering.ClusteringComponent" > | |
| 727 | + <!-- Declare an engine --> | |
| 728 | + <lst name="engine"> | |
| 729 | + <!-- The name, only one can be named "default" --> | |
| 730 | + <str name="name">default</str> | |
| 731 | + <!-- | |
| 732 | + Class name of Carrot2 clustering algorithm. Currently available algorithms are: | |
| 733 | + | |
| 734 | + * org.carrot2.clustering.lingo.LingoClusteringAlgorithm | |
| 735 | + * org.carrot2.clustering.stc.STCClusteringAlgorithm | |
| 736 | + | |
| 737 | + See http://project.carrot2.org/algorithms.html for the algorithm's characteristics. | |
| 738 | + --> | |
| 739 | + <str name="carrot.algorithm">org.carrot2.clustering.lingo.LingoClusteringAlgorithm</str> | |
| 740 | + <!-- | |
| 741 | + Overriding values for Carrot2 default algorithm attributes. For a description | |
| 742 | + of all available attributes, see: http://download.carrot2.org/stable/manual/#chapter.components. | |
| 743 | + Use attribute key as name attribute of str elements below. These can be further | |
| 744 | + overridden for individual requests by specifying attribute key as request | |
| 745 | + parameter name and attribute value as parameter value. | |
| 746 | + --> | |
| 747 | + <str name="LingoClusteringAlgorithm.desiredClusterCountBase">20</str> | |
| 748 | + </lst> | |
| 749 | + <lst name="engine"> | |
| 750 | + <str name="name">stc</str> | |
| 751 | + <str name="carrot.algorithm">org.carrot2.clustering.stc.STCClusteringAlgorithm</str> | |
| 752 | + </lst> | |
| 753 | + </searchComponent> | |
| 754 | + <requestHandler name="/clustering" | |
| 755 | + enable="${solr.clustering.enabled:false}" | |
| 756 | + class="solr.SearchHandler"> | |
| 757 | + <lst name="defaults"> | |
| 758 | + <bool name="clustering">true</bool> | |
| 759 | + <str name="clustering.engine">default</str> | |
| 760 | + <bool name="clustering.results">true</bool> | |
| 761 | + <!-- The title field --> | |
| 762 | + <str name="carrot.title">name</str> | |
| 763 | + <str name="carrot.url">id</str> | |
| 764 | + <!-- The field to cluster on --> | |
| 765 | + <str name="carrot.snippet">features</str> | |
| 766 | + <!-- produce summaries --> | |
| 767 | + <bool name="carrot.produceSummary">true</bool> | |
| 768 | + <!-- the maximum number of labels per cluster --> | |
| 769 | + <!--<int name="carrot.numDescriptions">5</int>--> | |
| 770 | + <!-- produce sub clusters --> | |
| 771 | + <bool name="carrot.outputSubClusters">false</bool> | |
| 772 | + </lst> | |
| 773 | + <arr name="last-components"> | |
| 774 | + <str>clusteringComponent</str> | |
| 775 | + </arr> | |
| 776 | + </requestHandler> | |
| 777 | + | |
| 778 | + <!-- Solr Cell: http://wiki.apache.org/solr/ExtractingRequestHandler --> | |
| 779 | + <requestHandler name="/update/extract" class="org.apache.solr.handler.extraction.ExtractingRequestHandler" startup="lazy"> | |
| 780 | + <lst name="defaults"> | |
| 781 | + <!-- All the main content goes into "text"... if you need to return | |
| 782 | + the extracted text or do highlighting, use a stored field. --> | |
| 783 | + <str name="fmap.content">text</str> | |
| 784 | + <str name="lowernames">true</str> | |
| 785 | + <str name="uprefix">ignored_</str> | |
| 786 | + | |
| 787 | + <!-- capture link hrefs but ignore div attributes --> | |
| 788 | + <str name="captureAttr">true</str> | |
| 789 | + <str name="fmap.a">links</str> | |
| 790 | + <str name="fmap.div">ignored_</str> | |
| 791 | + </lst> | |
| 792 | + </requestHandler> | |
| 793 | + | |
| 794 | + | |
| 795 | + <!-- A component to return terms and document frequency of those terms. | |
| 796 | + This component does not yet support distributed search. --> | |
| 797 | + <searchComponent name="termsComponent" class="org.apache.solr.handler.component.TermsComponent"/> | |
| 798 | + | |
| 799 | + <requestHandler name="/terms" class="org.apache.solr.handler.component.SearchHandler"> | |
| 800 | + <lst name="defaults"> | |
| 801 | + <bool name="terms">true</bool> | |
| 802 | + </lst> | |
| 803 | + <arr name="components"> | |
| 804 | + <str>termsComponent</str> | |
| 805 | + </arr> | |
| 806 | + </requestHandler> | |
| 807 | + | |
| 808 | + | |
| 809 | + <!-- a search component that enables you to configure the top results for | |
| 810 | + a given query regardless of the normal lucene scoring.--> | |
| 811 | + <searchComponent name="elevator" class="solr.QueryElevationComponent" > | |
| 812 | + <!-- pick a fieldType to analyze queries --> | |
| 813 | + <str name="queryFieldType">string</str> | |
| 814 | + <str name="config-file">elevate.xml</str> | |
| 815 | + </searchComponent> | |
| 816 | + | |
| 817 | + <!-- a request handler utilizing the elevator component --> | |
| 818 | + <requestHandler name="/elevate" class="solr.SearchHandler" startup="lazy"> | |
| 819 | + <lst name="defaults"> | |
| 820 | + <str name="echoParams">explicit</str> | |
| 821 | + </lst> | |
| 822 | + <arr name="last-components"> | |
| 823 | + <str>elevator</str> | |
| 824 | + </arr> | |
| 825 | + </requestHandler> | |
| 826 | + | |
| 827 | + | |
| 828 | + <!-- Update request handler. | |
| 829 | + | |
| 830 | + Note: Since solr1.1 requestHandlers requires a valid content type header if posted in | |
| 831 | + the body. For example, curl now requires: -H 'Content-type:text/xml; charset=utf-8' | |
| 832 | + The response format differs from solr1.1 formatting and returns a standard error code. | |
| 833 | + To enable solr1.1 behavior, remove the /update handler or change its path | |
| 834 | + --> | |
| 835 | + <requestHandler name="/update" class="solr.XmlUpdateRequestHandler" /> | |
| 836 | + | |
| 837 | + | |
| 838 | + <requestHandler name="/update/javabin" class="solr.BinaryUpdateRequestHandler" /> | |
| 839 | + | |
| 840 | + <!-- | |
| 841 | + Analysis request handler. Since Solr 1.3. Use to return how a document is analyzed. Useful | |
| 842 | + for debugging and as a token server for other types of applications. | |
| 843 | + | |
| 844 | + This is deprecated in favor of the improved DocumentAnalysisRequestHandler and FieldAnalysisRequestHandler | |
| 845 | + | |
| 846 | + <requestHandler name="/analysis" class="solr.AnalysisRequestHandler" /> | |
| 847 | + --> | |
| 848 | + | |
| 849 | + <!-- | |
| 850 | + An analysis handler that provides a breakdown of the analysis process of provided docuemnts. This handler expects a | |
| 851 | + (single) content stream with the following format: | |
| 852 | + | |
| 853 | + <docs> | |
| 854 | + <doc> | |
| 855 | + <field name="id">1</field> | |
| 856 | + <field name="name">The Name</field> | |
| 857 | + <field name="text">The Text Value</field> | |
| 858 | + <doc> | |
| 859 | + <doc>...</doc> | |
| 860 | + <doc>...</doc> | |
| 861 | + ... | |
| 862 | + </docs> | |
| 863 | + | |
| 864 | + Note: Each document must contain a field which serves as the unique key. This key is used in the returned | |
| 865 | + response to assoicate an analysis breakdown to the analyzed document. | |
| 866 | + | |
| 867 | + Like the FieldAnalysisRequestHandler, this handler also supports query analysis by | |
| 868 | + sending either an "analysis.query" or "q" request paraemter that holds the query text to be analyized. It also | |
| 869 | + supports the "analysis.showmatch" parameter which when set to true, all field tokens that match the query | |
| 870 | + tokens will be marked as a "match". | |
| 871 | + --> | |
| 872 | + <requestHandler name="/analysis/document" class="solr.DocumentAnalysisRequestHandler" /> | |
| 873 | + | |
| 874 | + <!-- | |
| 875 | + RequestHandler that provides much the same functionality as analysis.jsp. Provides the ability | |
| 876 | + to specify multiple field types and field names in the same request and outputs index-time and | |
| 877 | + query-time analysis for each of them. | |
| 878 | + | |
| 879 | + Request parameters are: | |
| 880 | + analysis.fieldname - The field name whose analyzers are to be used | |
| 881 | + analysis.fieldtype - The field type whose analyzers are to be used | |
| 882 | + analysis.fieldvalue - The text for index-time analysis | |
| 883 | + q (or analysis.q) - The text for query time analysis | |
| 884 | + analysis.showmatch (true|false) - When set to true and when query analysis is performed, the produced | |
| 885 | + tokens of the field value analysis will be marked as "matched" for every | |
| 886 | + token that is produces by the query analysis | |
| 887 | + --> | |
| 888 | + <requestHandler name="/analysis/field" class="solr.FieldAnalysisRequestHandler" /> | |
| 889 | + | |
| 890 | + | |
| 891 | + <!-- CSV update handler, loaded on demand --> | |
| 892 | + <requestHandler name="/update/csv" class="solr.CSVRequestHandler" startup="lazy" /> | |
| 893 | + | |
| 894 | + | |
| 895 | + <!-- | |
| 896 | + Admin Handlers - This will register all the standard admin RequestHandlers. Adding | |
| 897 | + this single handler is equivalent to registering: | |
| 898 | + | |
| 899 | + <requestHandler name="/admin/luke" class="org.apache.solr.handler.admin.LukeRequestHandler" /> | |
| 900 | + <requestHandler name="/admin/system" class="org.apache.solr.handler.admin.SystemInfoHandler" /> | |
| 901 | + <requestHandler name="/admin/plugins" class="org.apache.solr.handler.admin.PluginInfoHandler" /> | |
| 902 | + <requestHandler name="/admin/threads" class="org.apache.solr.handler.admin.ThreadDumpHandler" /> | |
| 903 | + <requestHandler name="/admin/properties" class="org.apache.solr.handler.admin.PropertiesRequestHandler" /> | |
| 904 | + <requestHandler name="/admin/file" class="org.apache.solr.handler.admin.ShowFileRequestHandler" > | |
| 905 | + | |
| 906 | + If you wish to hide files under ${solr.home}/conf, explicitly register the ShowFileRequestHandler using: | |
| 907 | + <requestHandler name="/admin/file" class="org.apache.solr.handler.admin.ShowFileRequestHandler" > | |
| 908 | + <lst name="invariants"> | |
| 909 | + <str name="hidden">synonyms.txt</str> | |
| 910 | + <str name="hidden">anotherfile.txt</str> | |
| 911 | + </lst> | |
| 912 | + </requestHandler> | |
| 913 | + --> | |
| 914 | + <requestHandler name="/admin/" class="org.apache.solr.handler.admin.AdminHandlers" /> | |
| 915 | + | |
| 916 | + <!-- ping/healthcheck --> | |
| 917 | + <requestHandler name="/admin/ping" class="PingRequestHandler"> | |
| 918 | + <lst name="defaults"> | |
| 919 | + <str name="qt">standard</str> | |
| 920 | + <str name="q">solrpingquery</str> | |
| 921 | + <str name="echoParams">all</str> | |
| 922 | + </lst> | |
| 923 | + </requestHandler> | |
| 924 | + | |
| 925 | + <!-- Echo the request contents back to the client --> | |
| 926 | + <requestHandler name="/debug/dump" class="solr.DumpRequestHandler" > | |
| 927 | + <lst name="defaults"> | |
| 928 | + <str name="echoParams">explicit</str> <!-- for all params (including the default etc) use: 'all' --> | |
| 929 | + <str name="echoHandler">true</str> | |
| 930 | + </lst> | |
| 931 | + </requestHandler> | |
| 932 | + | |
| 933 | + <highlighting> | |
| 934 | + <!-- Configure the standard fragmenter --> | |
| 935 | + <!-- This could most likely be commented out in the "default" case --> | |
| 936 | + <fragmenter name="gap" class="org.apache.solr.highlight.GapFragmenter" default="true"> | |
| 937 | + <lst name="defaults"> | |
| 938 | + <int name="hl.fragsize">100</int> | |
| 939 | + </lst> | |
| 940 | + </fragmenter> | |
| 941 | + | |
| 942 | + <!-- A regular-expression-based fragmenter (f.i., for sentence extraction) --> | |
| 943 | + <fragmenter name="regex" class="org.apache.solr.highlight.RegexFragmenter"> | |
| 944 | + <lst name="defaults"> | |
| 945 | + <!-- slightly smaller fragsizes work better because of slop --> | |
| 946 | + <int name="hl.fragsize">70</int> | |
| 947 | + <!-- allow 50% slop on fragment sizes --> | |
| 948 | + <float name="hl.regex.slop">0.5</float> | |
| 949 | + <!-- a basic sentence pattern --> | |
| 950 | + <str name="hl.regex.pattern">[-\w ,/\n\"']{20,200}</str> | |
| 951 | + </lst> | |
| 952 | + </fragmenter> | |
| 953 | + | |
| 954 | + <!-- Configure the standard formatter --> | |
| 955 | + <formatter name="html" class="org.apache.solr.highlight.HtmlFormatter" default="true"> | |
| 956 | + <lst name="defaults"> | |
| 957 | + <str name="hl.simple.pre"><![CDATA[<em>]]></str> | |
| 958 | + <str name="hl.simple.post"><![CDATA[</em>]]></str> | |
| 959 | + </lst> | |
| 960 | + </formatter> | |
| 961 | + </highlighting> | |
| 962 | + | |
| 963 | + <!-- An example dedup update processor that creates the "id" field on the fly | |
| 964 | + based on the hash code of some other fields. This example has overwriteDupes | |
| 965 | + set to false since we are using the id field as the signatureField and Solr | |
| 966 | + will maintain uniqueness based on that anyway. | |
| 967 | + | |
| 968 | + You have to link the chain to an update handler above to use it ie: | |
| 969 | + <requestHandler name="/update "class="solr.XmlUpdateRequestHandler"> | |
| 970 | + <lst name="defaults"> | |
| 971 | + <str name="update.processor">dedupe</str> | |
| 972 | + </lst> | |
| 973 | + </requestHandler> | |
| 974 | + --> | |
| 975 | + <!-- | |
| 976 | + <updateRequestProcessorChain name="dedupe"> | |
| 977 | + <processor class="org.apache.solr.update.processor.SignatureUpdateProcessorFactory"> | |
| 978 | + <bool name="enabled">true</bool> | |
| 979 | + <str name="signatureField">id</str> | |
| 980 | + <bool name="overwriteDupes">false</bool> | |
| 981 | + <str name="fields">name,features,cat</str> | |
| 982 | + <str name="signatureClass">org.apache.solr.update.processor.Lookup3Signature</str> | |
| 983 | + </processor> | |
| 984 | + <processor class="solr.LogUpdateProcessorFactory" /> | |
| 985 | + <processor class="solr.RunUpdateProcessorFactory" /> | |
| 986 | + </updateRequestProcessorChain> | |
| 987 | + --> | |
| 988 | + | |
| 989 | + | |
| 990 | + <!-- queryResponseWriter plugins... query responses will be written using the | |
| 991 | + writer specified by the 'wt' request parameter matching the name of a registered | |
| 992 | + writer. | |
| 993 | + The "default" writer is the default and will be used if 'wt' is not specified | |
| 994 | + in the request. XMLResponseWriter will be used if nothing is specified here. | |
| 995 | + The json, python, and ruby writers are also available by default. | |
| 996 | + | |
| 997 | + <queryResponseWriter name="xml" class="org.apache.solr.request.XMLResponseWriter" default="true"/> | |
| 998 | + <queryResponseWriter name="json" class="org.apache.solr.request.JSONResponseWriter"/> | |
| 999 | + <queryResponseWriter name="python" class="org.apache.solr.request.PythonResponseWriter"/> | |
| 1000 | + <queryResponseWriter name="ruby" class="org.apache.solr.request.RubyResponseWriter"/> | |
| 1001 | + <queryResponseWriter name="php" class="org.apache.solr.request.PHPResponseWriter"/> | |
| 1002 | + <queryResponseWriter name="phps" class="org.apache.solr.request.PHPSerializedResponseWriter"/> | |
| 1003 | + | |
| 1004 | + <queryResponseWriter name="custom" class="com.example.MyResponseWriter"/> | |
| 1005 | + --> | |
| 1006 | + | |
| 1007 | + <!-- XSLT response writer transforms the XML output by any xslt file found | |
| 1008 | + in Solr's conf/xslt directory. Changes to xslt files are checked for | |
| 1009 | + every xsltCacheLifetimeSeconds. | |
| 1010 | + --> | |
| 1011 | + <queryResponseWriter name="xslt" class="org.apache.solr.request.XSLTResponseWriter"> | |
| 1012 | + <int name="xsltCacheLifetimeSeconds">5</int> | |
| 1013 | + </queryResponseWriter> | |
| 1014 | + | |
| 1015 | + | |
| 1016 | + <!-- example of registering a query parser | |
| 1017 | + <queryParser name="lucene" class="org.apache.solr.search.LuceneQParserPlugin"/> | |
| 1018 | + --> | |
| 1019 | + | |
| 1020 | + <!-- example of registering a custom function parser | |
| 1021 | + <valueSourceParser name="myfunc" class="com.mycompany.MyValueSourceParser" /> | |
| 1022 | + --> | |
| 1023 | + | |
| 1024 | + <!-- config for the admin interface --> | |
| 1025 | + <admin> | |
| 1026 | + <defaultQuery>solr</defaultQuery> | |
| 1027 | + | |
| 1028 | + <!-- configure a healthcheck file for servers behind a loadbalancer | |
| 1029 | + <healthcheck type="file">server-enabled</healthcheck> | |
| 1030 | + --> | |
| 1031 | + </admin> | |
| 1032 | + | |
| 1033 | + <requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler"> | |
| 1034 | + <lst name="defaults"> | |
| 1035 | + <str name="config">/etc/solr/conf/data-config.xml</str> | |
| 1036 | + </lst> | |
| 1037 | + </requestHandler> | |
| 1038 | + | |
| 1039 | + | |
| 1040 | +</config> | ... | ... |