将多列映射到一列以获取自定义搜索建议

时间:2016-05-11 21:38:35

标签: android sqlite hashmap android-contentprovider

我想要实现的目标:Android中的自定义搜索,可以查看多个列以向用户提供建议。

我可以将单个“主题”列映射到系统指定的SUGGEST_COLUMN_TEXT_1,这非常有效,我甚至可以将主题分组以删除重复的条目。

但是,我想要的是将“作者名字||''||作者姓氏”(将这两个作为单行条目连接)和“作者组名称”包含在该单个SUGGEST_COLUMN_TEXT_1中(然后弄清楚如何按任何重复进行分组?)

我考虑过使用HashMap,但是查询构建器会调用一个String,所以我不确定这是否可行。

这可能吗?不,我确定是的。有任何想法吗?也许是联盟?我已经注释掉了下面的一些似乎不起作用的代码。

private static final HashMap<String, String> SEARCH_PROJECTION_MAP;
    static {

        SEARCH_PROJECTION_MAP = new HashMap<String, String>();
        SEARCH_PROJECTION_MAP.put("_id", "_id");
        SEARCH_PROJECTION_MAP.put(SearchManager.SUGGEST_COLUMN_TEXT_1,
                ExternalDbContract.QuoteEntry.TOPIC
//                        + " OR \"" + ExternalDbContract.QuoteEntry.AUTHOR_FIRST_NAME
//                        + "\" || \' \' || \"" + ExternalDbContract.QuoteEntry.AUTHOR_LAST_NAME
//                        + "\" OR \"" + ExternalDbContract.QuoteEntry.AUTHOR_GROUP_NAME
                        + "\" AS "
                        + SearchManager.SUGGEST_COLUMN_TEXT_1);    
    } 

就原始SQL而言,我认为这正是我想要实现的目标:

"SELECT Topic FROM quotes WHERE Topic LIKE " + selectionArgs[0] +
                "UNION SELECT \"Author First Name\" || ' ' || \"Author Last Name\" FROM quotes WHERE \"Author First Name\" LIKE " + selectionArgs[0] + " OR " + "\"Author Last Name\" LIKE " + selectionArgs[0] +
                "UNION SELECT \"Author Group Name\" FROM quotes WHERE \"Author Group Name\" LIKE " + selectionArgs[0] +
                "ORDER BY ASC LIMIT 10";

如何使用Android的自定义建议格式完成此操作?

1 个答案:

答案 0 :(得分:0)

最后,我放弃了投影图并直接进入原始SQL。 一些警告 - 我的列名中有空格。不要这样做。 '%a%'代表用户查询,在代码中它实际上是selectionArgs [0]。你会注意到我有两个CASE语句,一个是建议,另一个是使用tapped建议作为意图数据字符串而不是行id。在我的情况下是必需的。

像这样:

选择“作者名字”时的情况“LIKE'%an%'那么”作者名字“|| ''|| “作者姓氏” 当“作者姓氏”喜欢'%a%'那么“作者名字”|| ''|| “作者姓氏” 当“作者组名称”喜欢'%a%'然后“作者组名称” 当主题喜欢'%a%'那么主题 结束为suggest_text_1,

当“作者名字”喜欢'%a%'然后“作者名字”||时的情况''|| “作者姓氏” 当“作者姓氏”喜欢'%a%'那么“作者名字”|| ''|| “作者姓氏” 当“作者组名称”喜欢'%a%'然后“作者组名称” 当主题喜欢'%a%'那么主题 结束为suggest_data_intent_id,_id

FROM引号 在哪里(主题喜欢'%a%' 或“作者名字”喜欢'%a%'
或“作者组名称”LIKE'%a%' 或“作者姓氏”LIKE'%a%') GROUP BY suggest_text_1 ORDER BY suggest_text_1 ASC