按匹配数对搜索结果(来自 Android SearchView 查询)进行排序

Sorting search results (from Android SearchView query) by number of matches

在 Android 中使用 SearchView 执行搜索后,我正在尝试找到一种根据相关性对搜索结果进行排序的好方法。对我来说,相关性意味着两个 SQLite 文本列中的匹配数

我使用的是 CursorLoader,最后可以将排序顺序提供给构造函数

CursorLoader tLoader = new CursorLoader(
    getActivity(), ContentProviderM.ARTICLE_CONTENT_URI,
    tProj, tSel, tSelArgs, SORT_ORDER);

(或使用setSortOrder (String sortOrder)方法设置)

但我需要比这更大的灵活性,因为我希望根据匹配项的数量进行排序,而不仅仅是一两列

我自己能想到的唯一解决方案是在我的 SQLite table 中添加另一列,进行一些处理,然后将该列作为排序列提供给 CursorLoader

现在回答我的问题:使用 SQLite 语法向 CursorLoader 提供排序顺序信息的最佳方式是什么,避免必须添加新列? (这个 SQLite 代码会是什么样子?)此外,我想问更多的一般性问题:对于我错过的这个问题,是否有不同的解决方案?

感谢您的帮助!并致以亲切的问候, 托德

取决于content provider,如果它只是传递给orderBy字段,你可以做任何事情。

SQLiteDatabase query

orderBy How to order the rows, formatted as an SQL ORDER BY clause (excluding the ORDER BY itself). Passing null will use the default sort order, which may be unordered.

你可以随心所欲,这只是ORDER BY

之后的一行

P.S。这完全取决于Content Provider,它选择忽略参数,你什么也做不了。

我找到了这个问题的 "workaround"。

在研究了编写 sqlite 代码的不同方法之后,我最终只是添加了一个新的 table 列来进行排序。此列仅存储一个整数,并在每次用户执行搜索时更新,就在创建 CursorLoader 之前

优点:

  • 我们现在可以在 Java 代码中进行所有相关性计算

缺点:

  • 相关性计算在搜索完成时完成,因此如果我们有大量项目,处理所有内容可能需要一些时间