首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FTS3中的多列匹配

FTS3中的多列匹配
EN

Stack Overflow用户
提问于 2011-11-04 10:50:15
回答 3查看 1.3K关注 0票数 2

我有一个简单的数据库三列:标题,数据,信息。我将它们存储在SQLite FTS3数据库中,这样我就可以轻松地执行全文搜索。我的应用基于Android的可搜索字典示例。我不知道该怎么做的一件事是如何在两列之间进行搜索(匹配)。基本上,我希望在标题和数据列中获取并搜索该查询。以下是准备查询的方法:

代码语言:javascript
复制
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逻辑错误。非常感谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-11-08 11:06:36

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

代码语言:javascript
复制
    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
EN

Stack Overflow用户

发布于 2011-11-04 10:56:26

您将不得不编写自己的查询函数。你需要你的查询看起来像这样:

代码语言:javascript
复制
 select * from table_name where title equals ? or info equals ?

您不能简单地将or添加到语句的equals部分(这是一个常见的错误)。

票数 0
EN

Stack Overflow用户

发布于 2015-11-24 12:11:31

我就是这么做的

代码语言:javascript
复制
select * from table_name where table_name match 'YOURSEARCHSTRING'
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8004387

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档