我希望您就此优化提出建议:
数据: 我有一个带有+ - 3000个城市的SQLite数据库,所有这些城市都有名称和一些经度和经度。所有城市都具有相关性(基于用户访问它们的频率)。相关性是经典整数。然后,我再次将用户位置作为纬度/经度坐标。
请求: 我需要创建自动完成editBox。建议必须满足以下条件:
1)editBox中的短语必须是建议城市名称的子字符串。
2)建议必须先按相关性排序。 (经典整数排序,没问题)
3)如果相关性相同,则建议按距离用户排序。
4)显示最大值10条建议。
由于通常有很多城市具有相同的相关性,最大的问题是距离排序。
我目前的做法:
A)使用经典名称获取满足条件(1)和(2)的城市的ID和坐标:按相关性排序名称LIKE'%短语%'。
B)按相关性将结果拆分为组。使用Java中的排序按距离排序这些相关性组。
C)当有10个建议被修复时(f.e。11个相关组,都包含一个城市,因此不需要进行位置排序)停止订购。
这很有效。但有个问题。通常,很少有城市具有不同的相关性。 因此,当用户开始输入并且搜索短语中只有一两个字母时,我最终会按距离排序500个城市,只是为了获得我的10条建议,我觉得效率非常低。
有没有更好的方法来使用SQLite处理这种情况?
P.S。它在Android上运行,如果有帮助:)