Search
Note: the following is for Jackrabbit 2.x and does not apply for Jackrabbit Oak.
Features
Node names and property values are indexed as soon as the data is saved or as soon as the transaction is committed.
Text extraction is done asynchronously in a in a background thread. That means changed or added text is not available immediately, but after a short delay. The exact behavior can be configured using the extractor* settings.
Search Configuration
The search index in Jackrabbit is pluggable and has a default implementation based on Apache Lucene. It is configured in the file workspace.xml once the workspace is created. For new workspaces, the configuration in the file repository.xml is used as a template.
To disable the search index, disable (comment out) the index configuration in the file repository.xml and workspace.xml file(s).
This default implementation has the following options:
Parameter |
Default Value |
Description |
Since |
path |
none |
The location of the index directory. This parameter is mandatory. A reasonable value is: { |
1.0 |
useCompoundFile |
true |
Advises lucene to use compound files for the index files. |
1.0 |
minMergeDocs |
100 |
Minimum number of nodes in an index until segments are merged |
1.0 |
volatileIdleTime |
3 |
Idle time in seconds until the volatile index part is moved to a persistent index even though minMergeDocs is not reached. |
1.0 |
maxMergeDocs |
100000, >=1.4: 2147483647 |
Maximum number of nodes in segments that will be merged. The default value changed in Jackrabbit 1.4 to Integer.MAX_VALUE. |
1.0 |
mergeFactor |
10 |
Determines how often segment indices are merged. |
1.0 |
maxFieldLength |
10000 |
The number of words that are fulltext indexed at most per property. |
1.1 |
bufferSize |
10 |
Maximum number of documents that are held in a pending queue until added to the index |
1.0 |
cacheSize |
1000 |
Size of the document number cache. This cache maps uuids to lucene document numbers |
1.0 |
forceConsistencyCheck |
false |
Runs a consistency check on every startup. If false, a consistency check is only performed when the search index detects a prior forced shutdown. |
1.0 |
autoRepair |
true |
Errors detected by a consistency check are automatically repaired. If false, errors are only written to the log. |
1.0 |
analyzer |
|
Class name of a lucene analyzer to use for fulltext indexing of text. |
1.0 |
queryClass |
|
Class name that implements the |
1.0 |
respectDocumentOrder |
true, >=1.5: false |
If true and the query does not contain an 'order by' clause, result nodes will be in document order. For better performance when queries return a lot of nodes set to 'false' (In 1.5 'false' is now the default). |
1.0 |
textFilterClasses |
|
Sets the list of text filters (and text extractors) to use for extracting text content from binary properties. The list must be comma (or whitespace) separated, and contain fully qualified class names of the |
1.0 |
resultFetchSize |
2147483647 |
The number of results the query handler should initially fetch when a query is executed. Default value: Integer.MAX_VALUE (-> all) |
1.2.1 |
extractorPoolSize |
0, >=1.5: twice #ofAvailProcessors |
Defines the maximum number of background threads that are used to extract text from binary properties. If set to zero no background threads are allocated and text extractors run in the current thread. |
1.3 |
extractorTimeout |
100 |
A text extractor is executed using a background thread if it doesn't finish within this timeout defined in milliseconds. This parameter has no effect if extractorPoolSize is zero. |
1.3 |
extractorBackLogSize |
100, >=1.6: 2147483647 |
The size of the extractor pool back log. If all threads in the pool are busy, incomming work is put into a wait queue. If the wait queue reaches the back log size, incomming extractor work will not be queued anymore but will be executed with the current thread. |
1.3 |
excerptProviderClass |
1.3: |
The name of the class that implements |
1.3 |
supportHighlighting |
false |
If set to |
1.3 |
synonymProviderClass |
none |
The name of a class that implements |
1.4 |
synonymProviderConfigPath |
none |
The path to the synonym provider configuration file. This path interpreted relative to the |
1.4 |
indexingConfiguration |
none |
The path to the indexing configuration file. See also IndexingConfiguration |
1.4 |
indexingConfigurationClass |
|
The name of the class that implements |
1.4 |
enableConsistencyCheck |
false |
If set to |
1.4 |
spellCheckerClass |
none |
The name of a class that implements |
1.4 |
similarityClass |
Depends on what |
The name of a class that extends |
1.5 |
maxVolatileIndexSize |
1048576 |
The maximum volatile index size in bytes until it is written to disk. The default value is 1MB. |
1.6 |
initializeHierarchyCache |
true |
With the default value of |
1.6 |
Note: all parameters (except path) have default values and can be omitted to use the default.
Proprietary Features
Jackrabbit supports some advanced features, which are not specified in JSR 170:
- Extract text from binary content: TextExtractor; TextExtractorExamples
- Get a text excerpt with highlighted words that matched the query: ExcerptProvider
- Search for a term and its synonyms: SynonymSearch
- Search for similar nodes: SimilaritySearch
- Define index aggregates, rules and scores: IndexingConfiguration
- Check spelling of a fulltext query statement: SpellChecker
Fulltext Indexing of Chinese, Japanese and Korea
To index documents written in one of those languages, use the analyzer org.apache.lucene.analysis.cjk.CJKAnalyzer
. Due to a limitation of PDFBox, some PDF files may not be indexed at all or indexed correctly. If this is the case, a warning message is written to the log file ("Failed to extract PDF text content").
Rebuilding the Index
After a power outage or after killing the process, the index may become inconsistent. To rebuild the index, stop Jackrabbit, delete the index directories, and start Jackrabbit. The index will automatically be re-built. There is one index directory for each workspace at <repositoryHome>/<workspaceName>/index
, plus one index directory for the version store at <repositoryHome>/repository/index
.
Analyzing Query Performance
To get query statements and timings, set the following log level in log4j.xml:
<logger name="org.apache.jackrabbit.core.query.QueryImpl"> <level value="debug"/> </logger>
SQL-2
The default query language for JCR 2.0 is SQL-2.