2011-07-07 18 views
0

任何人都可以在java程序的幫助下解釋如何使用H2嵌入式數據庫的全文搜索。如何在java中使用H2數據庫的全文搜索功能?

執行「SELECT * FROM FT_SEARCH_DATA('word',0,0)」返回選擇查詢字符串。我是否需要再次執行這個以獲得最終結果?

+2

本教程中的示例對我來說似乎很清楚。你嘗試過嗎?如果沒有,那就這樣做。如果是這樣,編輯你的問題來解釋你的具體問題是什麼。目前,你的問題如「我太懶惰和/或愚蠢的去跟隨教程」,這不鼓勵人們回答。 –

+0

低選民投票率也令人失望。 – trashgod

+0

我不理解'QUERY:「PUBLIC」。「TEST」WHERE「ID」= 1' – Vivek

回答

5

使用H2全文索引的Java程序是the unit test program。從那裏的例子:

Connection conn = ... 
    Statement stat = conn.createStatement(); 
    stat.execute("CREATE ALIAS IF NOT EXISTS FT_INIT FOR \"org.h2.fulltext.FullText.init\""); 
    stat.execute("CALL FT_INIT()"); 
    FullText.setIgnoreList(conn, "to,this"); 
    FullText.setWhitespaceChars(conn, " ,.-"); 
    stat.execute("CREATE TABLE TEST(ID INT PRIMARY KEY, NAME VARCHAR)"); 
    stat.execute("INSERT INTO TEST VALUES(1, 'Welcome to this world, One_Word')"); 
    stat.execute("CALL FT_CREATE_INDEX('PUBLIC', 'TEST', NULL)"); 
    ResultSet rs; 
    rs = stat.executeQuery("SELECT * FROM FT_SEARCH('Welcome', 0, 0)"); 
    assertTrue(rs.next()); 
    assertEquals("QUERY", rs.getMetaData().getColumnLabel(1)); 
    assertEquals("SCORE", rs.getMetaData().getColumnLabel(2)); 
    assertEquals("\"PUBLIC\".\"TEST\" WHERE \"ID\"=1", rs.getString(1)); 
    assertEquals("1.0", rs.getString(2)); 
    rs = stat.executeQuery("SELECT * FROM FT_SEARCH_DATA('One', 0, 0)"); 
    assertFalse(rs.next()); 
    rs = stat.executeQuery("SELECT * FROM FT_SEARCH_DATA('One_Word', 0, 0)"); 
    assertTrue(rs.next()); 
    rs = stat.executeQuery("SELECT * FROM FT_SEARCH_DATA('Welcome', 0, 0)"); 
    assertTrue(rs.next()); 

還有一個SQL script example。也許你對Javadocs for the FullText class感興趣 - 這將解釋什麼FT_SEARCH_DATA/searchData返回。

+0

+1我經常檢查'src/test/org/h2/samples'獲取洞察信息,但我也會開始檢查'src/test/org/h2/test'。 – trashgod

+0

謝謝托馬斯。但我有一個問題stat.executeQuery(「選擇*從FT_SEARCH_DATA('一',0,0)」)再次返回一個查詢沒有選擇子句我不得不再次執行此查詢以獲得最終結果,包括單詞'one'。我的第二個問題是如何在SELECT * FROM FT_SEARCH_DATA中使用「like%one%」。 – Vivek

+1

是的,你必須執行查詢才能得到最終結果。 FT_SEARCH_DATA只返回一個指向真實數據的指針。如果最終結果是一個大文件,返回最終結果將會非常成問題。 –

相關問題