Package org.h2.fulltext
Class FullTextLucene
- java.lang.Object
-
- org.h2.fulltext.FullText
-
- org.h2.fulltext.FullTextLucene
-
public class FullTextLucene extends FullText
This class implements the full text search based on Apache Lucene. Most methods can be called using SQL statements as well.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static classFullTextLucene.FullTextTriggerTrigger updates the index when a inserting, updating, or deleting a row.private static classFullTextLucene.IndexAccessA wrapper for the Lucene writer and searcher.
-
Field Summary
Fields Modifier and Type Field Description private static java.lang.StringIN_MEMORY_PREFIXThe prefix for a in-memory path.private static java.util.HashMap<java.lang.String,FullTextLucene.IndexAccess>INDEX_ACCESSprivate static java.lang.StringLUCENE_FIELD_COLUMN_PREFIXprivate static java.lang.StringLUCENE_FIELD_DATAprivate static java.lang.StringLUCENE_FIELD_MODIFIEDprivate static java.lang.StringLUCENE_FIELD_QUERYprivate static java.lang.StringSCHEMAprotected static booleanSTORE_DOCUMENT_TEXT_IN_INDEXWhether the text content should be stored in the Lucene index.private static java.lang.StringTRIGGER_PREFIX
-
Constructor Summary
Constructors Constructor Description FullTextLucene()
-
Method Summary
All Methods Static Methods Concrete Methods Modifier and Type Method Description protected static java.sql.SQLExceptionconvertException(java.lang.Exception e)Convert an exception to a fulltext exception.static voidcreateIndex(java.sql.Connection conn, java.lang.String schema, java.lang.String table, java.lang.String columnList)Create a new full text index for a table and column list.private static voidcreateOrDropTrigger(java.sql.Connection conn, java.lang.String schema, java.lang.String table, boolean create)private static voidcreateTrigger(java.sql.Connection conn, java.lang.String schema, java.lang.String table)Create the trigger.static voiddropAll(java.sql.Connection conn)Drops all full text indexes from the database.static voiddropIndex(java.sql.Connection conn, java.lang.String schema, java.lang.String table)Drop an existing full text index for a table.protected static FullTextLucene.IndexAccessgetIndexAccess(java.sql.Connection conn)Get the index writer/searcher wrapper for the given connection.protected static java.lang.StringgetIndexPath(java.sql.Connection conn)Get the path of the Lucene index for this database.private static voidindexExistingRows(java.sql.Connection conn, java.lang.String schema, java.lang.String table)Add the existing data to the index.static voidinit(java.sql.Connection conn)Initializes full text search functionality for this database.static voidreindex(java.sql.Connection conn)Re-creates the full text index for this database.protected static voidremoveIndexAccess(java.lang.String indexPath)Close the index writer and searcher and remove them from the index access set.private static voidremoveIndexFiles(java.sql.Connection conn)static java.sql.ResultSetsearch(java.sql.Connection conn, java.lang.String text, int limit, int offset)Searches from the full text index for this database.protected static java.sql.ResultSetsearch(java.sql.Connection conn, java.lang.String text, int limit, int offset, boolean data)Do the search.static java.sql.ResultSetsearchData(java.sql.Connection conn, java.lang.String text, int limit, int offset)Searches from the full text index for this database.-
Methods inherited from class org.h2.fulltext.FullText
addWords, addWords, asString, closeAll, createResultSet, hasChanged, parseKey, quoteSQL, removeAllTriggers, setColumns, setIgnoreList, setWhitespaceChars, throwException
-
-
-
-
Field Detail
-
STORE_DOCUMENT_TEXT_IN_INDEX
protected static final boolean STORE_DOCUMENT_TEXT_IN_INDEX
Whether the text content should be stored in the Lucene index.
-
INDEX_ACCESS
private static final java.util.HashMap<java.lang.String,FullTextLucene.IndexAccess> INDEX_ACCESS
-
TRIGGER_PREFIX
private static final java.lang.String TRIGGER_PREFIX
- See Also:
- Constant Field Values
-
SCHEMA
private static final java.lang.String SCHEMA
- See Also:
- Constant Field Values
-
LUCENE_FIELD_DATA
private static final java.lang.String LUCENE_FIELD_DATA
- See Also:
- Constant Field Values
-
LUCENE_FIELD_QUERY
private static final java.lang.String LUCENE_FIELD_QUERY
- See Also:
- Constant Field Values
-
LUCENE_FIELD_MODIFIED
private static final java.lang.String LUCENE_FIELD_MODIFIED
- See Also:
- Constant Field Values
-
LUCENE_FIELD_COLUMN_PREFIX
private static final java.lang.String LUCENE_FIELD_COLUMN_PREFIX
- See Also:
- Constant Field Values
-
IN_MEMORY_PREFIX
private static final java.lang.String IN_MEMORY_PREFIX
The prefix for a in-memory path. This prefix is only used internally within this class and not related to the database URL.- See Also:
- Constant Field Values
-
-
Method Detail
-
init
public static void init(java.sql.Connection conn) throws java.sql.SQLExceptionInitializes full text search functionality for this database. This adds the following Java functions to the database:- FTL_CREATE_INDEX(schemaNameString, tableNameString, columnListString)
- FTL_SEARCH(queryString, limitInt, offsetInt): result set
- FTL_REINDEX()
- FTL_DROP_ALL()
CREATE ALIAS IF NOT EXISTS FTL_INIT FOR "org.h2.fulltext.FullTextLucene.init"; CALL FTL_INIT();- Parameters:
conn- the connection- Throws:
java.sql.SQLException- on failure
-
createIndex
public static void createIndex(java.sql.Connection conn, java.lang.String schema, java.lang.String table, java.lang.String columnList) throws java.sql.SQLExceptionCreate a new full text index for a table and column list. Each table may only have one index at any time.- Parameters:
conn- the connectionschema- the schema name of the table (case sensitive)table- the table name (case sensitive)columnList- the column list (null for all columns)- Throws:
java.sql.SQLException- on failure
-
dropIndex
public static void dropIndex(java.sql.Connection conn, java.lang.String schema, java.lang.String table) throws java.sql.SQLExceptionDrop an existing full text index for a table. This method returns silently if no index for this table exists.- Parameters:
conn- the connectionschema- the schema name of the table (case sensitive)table- the table name (case sensitive)- Throws:
java.sql.SQLException- on failure
-
reindex
public static void reindex(java.sql.Connection conn) throws java.sql.SQLExceptionRe-creates the full text index for this database. Calling this method is usually not needed, as the index is kept up-to-date automatically.- Parameters:
conn- the connection- Throws:
java.sql.SQLException- on failure
-
dropAll
public static void dropAll(java.sql.Connection conn) throws java.sql.SQLExceptionDrops all full text indexes from the database.- Parameters:
conn- the connection- Throws:
java.sql.SQLException- on failure
-
search
public static java.sql.ResultSet search(java.sql.Connection conn, java.lang.String text, int limit, int offset) throws java.sql.SQLExceptionSearches from the full text index for this database. The returned result set has the following column:- QUERY (varchar): the query to use to get the data. The query does not include 'SELECT * FROM '. Example: PUBLIC.TEST WHERE ID = 1
- SCORE (float) the relevance score as returned by Lucene.
- Parameters:
conn- the connectiontext- the search querylimit- the maximum number of rows or 0 for no limitoffset- the offset or 0 for no offset- Returns:
- the result set
- Throws:
java.sql.SQLException- on failure
-
searchData
public static java.sql.ResultSet searchData(java.sql.Connection conn, java.lang.String text, int limit, int offset) throws java.sql.SQLExceptionSearches from the full text index for this database. The result contains the primary key data as an array. The returned result set has the following columns:- SCHEMA (varchar): the schema name. Example: PUBLIC
- TABLE (varchar): the table name. Example: TEST
- COLUMNS (array of varchar): comma separated list of quoted column names. The column names are quoted if necessary. Example: (ID)
- KEYS (array of values): comma separated list of values. Example: (1)
- SCORE (float) the relevance score as returned by Lucene.
- Parameters:
conn- the connectiontext- the search querylimit- the maximum number of rows or 0 for no limitoffset- the offset or 0 for no offset- Returns:
- the result set
- Throws:
java.sql.SQLException- on failure
-
convertException
protected static java.sql.SQLException convertException(java.lang.Exception e)
Convert an exception to a fulltext exception.- Parameters:
e- the original exception- Returns:
- the converted SQL exception
-
createTrigger
private static void createTrigger(java.sql.Connection conn, java.lang.String schema, java.lang.String table) throws java.sql.SQLExceptionCreate the trigger.- Parameters:
conn- the database connectionschema- the schema nametable- the table name- Throws:
java.sql.SQLException- on failure
-
createOrDropTrigger
private static void createOrDropTrigger(java.sql.Connection conn, java.lang.String schema, java.lang.String table, boolean create) throws java.sql.SQLException- Throws:
java.sql.SQLException
-
getIndexAccess
protected static FullTextLucene.IndexAccess getIndexAccess(java.sql.Connection conn) throws java.sql.SQLException
Get the index writer/searcher wrapper for the given connection.- Parameters:
conn- the connection- Returns:
- the index access wrapper
- Throws:
java.sql.SQLException- on failure
-
getIndexPath
protected static java.lang.String getIndexPath(java.sql.Connection conn) throws java.sql.SQLExceptionGet the path of the Lucene index for this database.- Parameters:
conn- the database connection- Returns:
- the path
- Throws:
java.sql.SQLException- on failure
-
indexExistingRows
private static void indexExistingRows(java.sql.Connection conn, java.lang.String schema, java.lang.String table) throws java.sql.SQLExceptionAdd the existing data to the index.- Parameters:
conn- the database connectionschema- the schema nametable- the table name- Throws:
java.sql.SQLException- on failure
-
removeIndexFiles
private static void removeIndexFiles(java.sql.Connection conn) throws java.sql.SQLException- Throws:
java.sql.SQLException
-
removeIndexAccess
protected static void removeIndexAccess(java.lang.String indexPath) throws java.sql.SQLExceptionClose the index writer and searcher and remove them from the index access set.- Parameters:
indexPath- the index path- Throws:
java.sql.SQLException- on failure
-
search
protected static java.sql.ResultSet search(java.sql.Connection conn, java.lang.String text, int limit, int offset, boolean data) throws java.sql.SQLExceptionDo the search.- Parameters:
conn- the database connectiontext- the querylimit- the limitoffset- the offsetdata- whether the raw data should be returned- Returns:
- the result set
- Throws:
java.sql.SQLException- on failure
-
-