【问题标题】:Sorting results when autocomplete matches multiple columns in SQL自动完成匹配 SQL 中的多列时对结果进行排序
【发布时间】:2009-10-27 19:42:15
【问题描述】:

我在处理一个自动完成字段时遇到了问题。我正在使用的字段由"<NAME> (<CODE>)" 形式组成。当用户开始输入文本时,我想显示任何匹配 NAMECODE 的结果。

例如,如果此列表包含项目及其代码,例如“个人计算机 (PC)”,那么我希望列表在用户键入“P”、“PC”、“Per "等。

我已经通过这样的查询在 SQLite 中正常工作:

SELECT *
FROM table
WHERE name LIKE "?%" or code LIKE "?%"

但是,我现在遇到的问题是如何最好地对由此返回的结果进行排序。例如,如果有人输入“PC”,我希望“Personal Computer (PC)”成为第一个结果。但是,如果还有另一行(您必须忍受我,因为这是人为的)“PC Case (301)”,那么我无法对结果进行简单的排序以确保 best 匹配首先出现。按名称和代码排序均首先返回 PC 机箱。

我想要一个查询,它首先返回最佳匹配,而不是按字母顺序排列的项目。我可以在 SQLite 中使用这样的函数来获取它,还是应该返回结果然后弄乱代码中的顺序?

如果有帮助,我将在 Android 上将其用于 FilterQueryProviders。

【问题讨论】:

  • 您可能需要考虑切换到全文搜索并使用排名。

标签: sql android sqlite autocomplete


【解决方案1】:

是的,您应该实现 FullTextSearch 并在查询中使用 MATCH
参考:http://dotnetperls.com/sqlite-fts3

【讨论】:

  • 我看不出这对我的情况有何帮助,因为这是排序问题,而不是匹配问题。
【解决方案2】:

这是事后的很长一段时间,但我已经解决了我的困境,而不必诉诸疯狂的排序策略。

基本上,一旦自动完成变得足够复杂,您需要实现自己的 CursorAdapter(实现 FilterQueryProvider),然后覆盖 convertToString()。这样,您最终可以通过 runQuery() 执行复杂的查询,但随后可以在 convertToString() 中将其转换为可读形式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-13
    • 2011-06-29
    • 2015-10-27
    • 2019-04-24
    • 1970-01-01
    相关资源
    最近更新 更多