DirectoryBuilder
to create Directory instead.@Deprecated public class InfinispanDirectory extends org.apache.lucene.store.Directory
Directory
which uses Infinispan to store Lucene indexes.
As the RAMDirectory the data is stored in memory, but provides some additional flexibility:
Passivation, LRU or LIRS Bigger indexes can be configured to passivate cleverly selected chunks of data to a cache store.
This can be a local filesystem, a network filesystem, a database or custom cloud stores like S3. See Infinispan's core documentation for a full list of available implementations, or CacheWriter
to implement more.
Non-volatile memory The contents of the index can be stored in it's entirety in such a store, so that on shutdown or crash of the system data is not lost. A copy of the index will be copied to the store in sync or async depending on configuration; In case you enable Infinispan's clustering even in case of async the segments are always duplicated synchronously to other nodes, so you can benefit from good reliability even while choosing the asynchronous mode to write the index to the slowest store implementations.
Real-time change propagation All changes done on a node are propagated at low latency to other nodes of the cluster; this was designed especially for interactive usage of Lucene, so that after an IndexWriter commits on one node new IndexReaders opened on any node of the cluster will be able to deliver updated search results.
Distributed heap Infinispan acts as a shared heap for the purpose of total memory consumption, so you can avoid hitting the slower disks even if the total size of the index can't fit in the memory of a single node: network is faster than disks, especially if the index is bigger than the memory available to cache it.
Distributed locking
As default Lucene Directory implementations a global lock needs to protect the index from having more than an IndexWriter open; in case of a
replicated or distributed index you need to enable a cluster-wide LockFactory
.
This implementation uses by default BaseLockFactory
; in case you want to apply changes during a JTA transaction
see also TransactionalLockFactory
.
Combined store patterns It's possible to combine different stores and passivation policies, so that each nodes shares the index changes quickly to other nodes, offloads less frequently used data to a per-node local filesystem, and the cluster also coordinates to keeps a safe copy on a shared store.
Directory
,
LockFactory
,
BaseLockFactory
,
TransactionalLockFactory
Modifier and Type | Field and Description |
---|---|
static int |
DEFAULT_BUFFER_SIZE
Deprecated.
Used as default chunk size, can be overridden at construction time.
|
Constructor and Description |
---|
InfinispanDirectory(Cache<?,?> cache)
Deprecated.
|
InfinispanDirectory(Cache<?,?> metadataCache,
Cache<?,?> chunksCache,
Cache<?,?> distLocksCache,
String indexName,
int chunkSize)
Deprecated.
This constructor assumes that three different caches are being used with specialized configurations for each
cache usage
|
InfinispanDirectory(Cache<?,?> metadataCache,
Cache<?,?> chunksCache,
String indexName,
org.apache.lucene.store.LockFactory lf,
int chunkSize,
SegmentReadLocker readLocker)
Deprecated.
|
InfinispanDirectory(Cache<?,?> cache,
String indexName)
Deprecated.
|
InfinispanDirectory(Cache<?,?> cache,
String indexName,
int chunkSize,
SegmentReadLocker readLocker)
Deprecated.
|
Modifier and Type | Method and Description |
---|---|
void |
close()
Deprecated.
|
org.apache.lucene.store.IndexOutput |
createOutput(String name)
Deprecated.
|
void |
deleteFile(String name)
Deprecated.
|
boolean |
fileExists(String name)
Deprecated.
|
long |
fileLength(String name)
Deprecated.
|
long |
fileModified(String name)
Deprecated.
|
String |
getIndexName()
Deprecated.
|
String[] |
list()
Deprecated.
|
String[] |
listAll()
Deprecated.
new name for list() in Lucene 3.0
|
org.apache.lucene.store.IndexInput |
openInput(String name)
Deprecated.
|
void |
renameFile(String from,
String to)
Deprecated.
|
String |
toString()
Deprecated.
|
void |
touchFile(String fileName)
Deprecated.
|
public static final int DEFAULT_BUFFER_SIZE
public InfinispanDirectory(Cache<?,?> metadataCache, Cache<?,?> chunksCache, String indexName, org.apache.lucene.store.LockFactory lf, int chunkSize, SegmentReadLocker readLocker)
metadataCache
- the cache to be used for all smaller metadata: prefer replication over distribution, avoid evictionchunksCache
- the cache to use for the space consuming segments: prefer distribution, enable eviction if neededindexName
- the unique index name, useful to store multiple indexes in the same cacheslf
- the LockFactory to be used by IndexWriters. @see org.infinispan.lucene.lockingchunkSize
- segments are fragmented in chunkSize bytes; larger values are more efficient for searching but less for distribution and network replicationreadLocker
- @see org.infinispan.lucene.readlocks for some implementations; you might be able to provide more efficient implementations by controlling the IndexReader's lifecycle.public InfinispanDirectory(Cache<?,?> cache, String indexName, int chunkSize, SegmentReadLocker readLocker)
public InfinispanDirectory(Cache<?,?> metadataCache, Cache<?,?> chunksCache, Cache<?,?> distLocksCache, String indexName, int chunkSize)
metadataCache
- contains the metadata of stored elementschunksCache
- cache containing the bulk of the index; this is the larger part of datadistLocksCache
- cache to store locks; should be replicated and not using a persistent CacheStoreindexName
- identifies the index; you can store different indexes in the same set of caches using different identifierschunkSize
- the maximum size in bytes for each chunk of data: larger sizes offer better search performance
but might be problematic to handle during network replication or storagepublic InfinispanDirectory(Cache<?,?> cache, String indexName)
cache
- the cache to use to store the indexindexName
- identifies the index; you can store different indexes in the same set of caches using different identifierspublic InfinispanDirectory(Cache<?,?> cache)
public String[] list()
public boolean fileExists(String name)
fileExists
in class org.apache.lucene.store.Directory
public long fileModified(String name)
public void touchFile(String fileName)
public void deleteFile(String name)
deleteFile
in class org.apache.lucene.store.Directory
public long fileLength(String name)
fileLength
in class org.apache.lucene.store.Directory
public org.apache.lucene.store.IndexOutput createOutput(String name)
public org.apache.lucene.store.IndexInput openInput(String name) throws IOException
IOException
public void close()
close
in interface Closeable
close
in interface AutoCloseable
close
in class org.apache.lucene.store.Directory
public String toString()
toString
in class org.apache.lucene.store.Directory
public String[] listAll()
listAll
in class org.apache.lucene.store.Directory
public String getIndexName()
Copyright © 2014 JBoss, a division of Red Hat. All Rights Reserved.