org.neo4j.index.lucene
Class LuceneIndexService

java.lang.Object
  extended by org.neo4j.index.impl.GenericIndexService
      extended by org.neo4j.index.lucene.LuceneIndexService
All Implemented Interfaces:
IndexService
Direct Known Subclasses:
LuceneFulltextIndexService

public class LuceneIndexService
extends org.neo4j.index.impl.GenericIndexService

An implementation of IndexService which uses Lucene as backend. Additional features to IndexService is:

See more information at http://wiki.neo4j.org/content/Indexing_with_IndexService


Field Summary
static int DEFAULT_LAZY_SEARCH_RESULT_THRESHOLD
          The default value for getLazySearchResultThreshold()
protected static String DIR_NAME
           
protected static String DOC_ID_KEY
           
protected static String DOC_INDEX_KEY
           
 
Constructor Summary
LuceneIndexService(GraphDatabaseService graphDb)
           
 
Method Summary
 void enableCache(String key, int maxNumberOfCachedEntries)
          Enables an LRU cache for a specific index (specified by key) so that the maxNumberOfCachedEntries number of results found with getNodes(String, Object) are cached for faster consecutive lookups.
protected  org.apache.lucene.search.Query formQuery(String key, Object value)
           
protected  Class<? extends LuceneDataSource> getDataSourceClass()
           
protected  String getDirName()
           
 int getLazySearchResultThreshold()
          Returns the threshold for when a result is considered big enough to skip cache and be returned as a fully lazy iterator so that getNodes(String, Object) will return very fast and all the reading and fetching of nodes is done lazily before each step in the iteration of the returned result.
 IndexHits<Node> getNodes(String key, Object value)
          Returns all nodes indexed with key and value.
 IndexHits<Node> getNodes(String key, Object value, org.apache.lucene.search.Sort sortingOrNull)
          Just like getNodes(String, Object), but with sorted result.
 Node getSingleNode(String key, Object value)
          Returns a single node indexed with associated with key and value.
protected  byte[] getXaResourceId()
           
 void index(Node node, String key, Object value)
          Index node with key and value.
protected  void indexThisTx(Node node, String key, Object value)
           
protected  Iterator<Node> instantiateIdToNodeIterator(Iterator<Long> ids)
           
protected  void removeIndexThisTx(Node node, String key, Object value)
           
 void setLazySearchResultThreshold(int numberOfHitsBeforeLazyLoading)
          Sets the threshold for when a result is considered big enough to skip cache and be returned as a fully lazy iterator so that getNodes(String, Object) will return very fast and all the reading and fetching of nodes is done lazily before each step in the iteration of the returned result.
 void shutdown()
          Stops this indexing service committing any asynchronous requests that are currently queued (see Isolation).
 
Methods inherited from class org.neo4j.index.impl.GenericIndexService
beginTx, getGraphDb, getQueue, removeIndex, setIsolation
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

DEFAULT_LAZY_SEARCH_RESULT_THRESHOLD

public static final int DEFAULT_LAZY_SEARCH_RESULT_THRESHOLD
The default value for getLazySearchResultThreshold()

See Also:
Constant Field Values

DOC_ID_KEY

protected static final String DOC_ID_KEY
See Also:
Constant Field Values

DOC_INDEX_KEY

protected static final String DOC_INDEX_KEY
See Also:
Constant Field Values

DIR_NAME

protected static final String DIR_NAME
See Also:
Constant Field Values
Constructor Detail

LuceneIndexService

public LuceneIndexService(GraphDatabaseService graphDb)
Parameters:
graphDb - the GraphDatabaseService to use.
Method Detail

getDataSourceClass

protected Class<? extends LuceneDataSource> getDataSourceClass()

getDirName

protected String getDirName()

getXaResourceId

protected byte[] getXaResourceId()

enableCache

public void enableCache(String key,
                        int maxNumberOfCachedEntries)
Enables an LRU cache for a specific index (specified by key) so that the maxNumberOfCachedEntries number of results found with getNodes(String, Object) are cached for faster consecutive lookups. It's preferred to enable cache at construction time.

Parameters:
key - the index to enable cache for.
maxNumberOfCachedEntries - the max size of the cache before old ones are flushed from the cache.

setLazySearchResultThreshold

public void setLazySearchResultThreshold(int numberOfHitsBeforeLazyLoading)
Sets the threshold for when a result is considered big enough to skip cache and be returned as a fully lazy iterator so that getNodes(String, Object) will return very fast and all the reading and fetching of nodes is done lazily before each step in the iteration of the returned result. The default value is DEFAULT_LAZY_SEARCH_RESULT_THRESHOLD.

Parameters:
numberOfHitsBeforeLazyLoading - the threshold where results which are bigger than that threshold becomes lazy.

getLazySearchResultThreshold

public int getLazySearchResultThreshold()
Returns the threshold for when a result is considered big enough to skip cache and be returned as a fully lazy iterator so that getNodes(String, Object) will return very fast and all the reading and fetching of nodes is done lazily before each step in the iteration of the returned result. The default value is DEFAULT_LAZY_SEARCH_RESULT_THRESHOLD.

Returns:
the threshold for when a result is considered big enough to be returned as a lazy iteration.

index

public void index(Node node,
                  String key,
                  Object value)
Index node with key and value. A node can be associated with any number of key-value pairs.

Note about updating an index: If you've indexed a value from a property on a Node and that value gets updated, you'll have to remove the old value in addition to indexing the new value, else both values (the new and the old) will be indexed for that node.

When deleting a Node, application should remove the index entries for the node as well, to keep the index consistent with the node space.

Note that this implementation will cast objects given as the value to String.

Specified by:
index in interface IndexService
Overrides:
index in class org.neo4j.index.impl.GenericIndexService
Parameters:
node - node to index
key - the key in the key-value pair to associate with node.
value - the value in the key-value pair to associate with node.

indexThisTx

protected void indexThisTx(Node node,
                           String key,
                           Object value)
Specified by:
indexThisTx in class org.neo4j.index.impl.GenericIndexService

getNodes

public IndexHits<Node> getNodes(String key,
                                Object value)
Returns all nodes indexed with key and value.

Note that this implementation will cast objects given as the value to String.

Parameters:
key - the key for index
value - the value for index
Returns:
nodes that have been indexed with key and value

getNodes

public IndexHits<Node> getNodes(String key,
                                Object value,
                                org.apache.lucene.search.Sort sortingOrNull)
Just like getNodes(String, Object), but with sorted result.

Parameters:
key - the index to query.
value - the value to query for.
sortingOrNull - lucene sorting behaviour for the result. Ignored if null.
Returns:
nodes that has been indexed with key and value, optionally sorted with sortingOrNull.

instantiateIdToNodeIterator

protected Iterator<Node> instantiateIdToNodeIterator(Iterator<Long> ids)

formQuery

protected org.apache.lucene.search.Query formQuery(String key,
                                                   Object value)

getSingleNode

public Node getSingleNode(String key,
                          Object value)
Description copied from interface: IndexService
Returns a single node indexed with associated with key and value. If no such node exist null is returned. If more then one node is found a runtime exception is thrown.

Parameters:
key - the key for index
value - the value for index
Returns:
node that has been indexed with key and value or null

removeIndexThisTx

protected void removeIndexThisTx(Node node,
                                 String key,
                                 Object value)
Specified by:
removeIndexThisTx in class org.neo4j.index.impl.GenericIndexService

shutdown

public void shutdown()
Description copied from interface: IndexService
Stops this indexing service committing any asynchronous requests that are currently queued (see Isolation). After this method has been invoked any following method invocation on this instance is invalid.

Specified by:
shutdown in interface IndexService
Overrides:
shutdown in class org.neo4j.index.impl.GenericIndexService


Copyright © 2010 Neo4j. All Rights Reserved.