【问题标题】:How to use full text search feature of H2 database in java?java中如何使用H2数据库的全文搜索功能?
【发布时间】:2011-09-30 12:06:44
【问题描述】:

任何人请解释如何在java程序的帮助下使用全文搜索H2嵌入式数据库。

执行“SELECT * FROM FT_SEARCH_DATA('word', 0, 0)”将返回一个选择查询字符串。是否需要再执行一次才能得到最终结果?

【问题讨论】:

  • 教程中的例子对我来说似乎很清楚。你试过跟随它吗?如果没有,请这样做。如果是这样,请编辑您的问题以解释您的具体问题是什么。目前,您的问题显示为“我太懒和/或太愚蠢,无法遵循教程”,这不鼓励人们回答。
  • 低投票率也令人失望。
  • 我不明白 'QUERY: "PUBLIC"."TEST" WHERE "ID"=1'
  • 从教程中,“PUBLIC 是架构名称,TEST 是表名称。”

标签: java database indexing h2


【解决方案1】:

使用 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 返回的内容。

【讨论】:

  • +1 我经常查看src/test/org/h2/samples 以获得见解,但我也会开始查看src/test/org/h2/test
  • 谢谢托马斯。但我有一个问题 stat.executeQuery("SELECT * FROM FT_SEARCH_DATA('One', 0, 0)") 再次返回没有选择子句的查询我是否必须再次重新执行此查询以获得最终结果,其中包括“一”字。我的第二个问题是如何在 SELECT * FROM FT_SEARCH_DATA 中使用“like %one%”。
  • 是的,您必须执行查询才能获得最终结果。 FT_SEARCH_DATA 只返回一个指向真实数据的指针。如果最终结果是大文档,返回最终结果会很成问题。
猜你喜欢
  • 2011-10-02
  • 1970-01-01
  • 1970-01-01
  • 2022-12-04
  • 1970-01-01
  • 2012-03-09
  • 2016-05-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多