【问题标题】:Multiple Column Match in FTS3FTS3 中的多列匹配
【发布时间】:2011-12-21 16:59:42
【问题描述】:

我有一个简单的三列数据库:标题、数据、信息。我将它们存储在 SQLite FTS3 数据库中,因此我可以轻松地执行全文搜索。我的应用程序基于 Android 的 Searchable Dictionary 示例。我不知道该怎么做的一件事是如何跨两列搜索(匹配)。我基本上想查询并在标题和数据列中搜索它。以下是准备查询的方法:

public Cursor searchMatches(String query, String[] columns) {
    String selection = KEY_TITLE + " MATCH ?";
    String[] selectionArguements = new String[] {query + "*"};
    return query(selection, selectionArguements, columns);
}

如果我不按照KEY_TITLE + " MATCH ?" 的确切格式进行选择,那么尽管 FTS3 文档说其他方法也可以工作,但其他任何方法都不会起作用。如何在 Android 中设置此选择以跨两列进行搜索?我试过添加OR,但我只是得到一个SQL逻辑错误。非常感谢!

【问题讨论】:

    标签: android sqlite match fts3


    【解决方案1】:

    我就是这样做的

    select * from table_name where table_name match 'YOURSEARCHSTRING'
    

    【讨论】:

      【解决方案2】:

      好吧,我找到了一个可行的解决方案,虽然它不是最漂亮的。它涉及使用UNION 简单地组合两个MATCH 查询。

          String wordQuery = builder.buildQuery(null, KEY_WORD + " MATCH '" + query + "*'", null, null, null, null, null);
          String definitionQuery = builder.buildQuery(null, KEY_DEFINITION + " MATCH '" + query + "*'", null, null, null, null, null);
          String unionQuery = builder.buildUnionQuery(new String[] {wordQuery, definitionQuery}, null, null);
          Cursor result = helper.getReadableDatabase().rawQuery(unionQuery, null);
      

      【讨论】:

        【解决方案3】:

        您将不得不编写自己的查询函数。你会希望你的查询看起来像:

         select * from table_name where title equals ? or info equals ?
        

        您不能简单地将或添加到语句的等号部分(常见错误)。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-08-03
          • 1970-01-01
          • 1970-01-01
          • 2021-05-05
          • 1970-01-01
          相关资源
          最近更新 更多