FTS3中的多列匹配

时间:2011-11-04 02:50:15

标签: android sqlite match fts3

我有一个包含三列的简单数据库:标题,数据,信息。我将它们存储在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逻辑错误。非常感谢!

2 个答案:

答案 0 :(得分:1)

好吧,我找到了一个可行的解决方案,虽然它不是最漂亮的。它涉及使用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);

答案 1 :(得分:0)

您将不得不编写自己的查询功能。您希望查询看起来像:

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

你不能简单地添加一个或等于语句的equals部分(一个常见的错误)。