我想知道如何将能够通过以这种方式来运行一个SQLite顺序

select * from contacts order by jarowinkler(contacts.name,'john smith');

我知道Android有与用户定义的函数的一个瓶颈,我有一个替代?

有帮助吗?

解决方案

步骤1:执行查询减去ORDER BY部分

步骤#2:创建一个包装您CursorWrapper,计算每个位置的哈罗-温克勒距离,排序位置,然后重写需要的位置(例如,CursormoveToPosition())所有方法时使用的排序位置的moveToNext()

其他提示

预计算串长度,并将其添加到单独的列。然后排序由该长度entired表。添加索引(如果可以的话)。然后加入比如你不想“塔瓦雅鲁藏布江”比较“约翰·史密斯”额外的过滤器。长度超出怪人的太多所以排除这些类型的比较通过长度,总长度的百分比。所以,如果你的话是10个字符,它只是比较与10个+ -2或10 + -3字符的单词。

这样,您将显著减少次这样的算法需要运行的数量。

通常在100个000项的vocalbulary这种滤波器减少比较,约300的号,除非你正在做一个完全成熟的记录链接,然后我就在想,为什么采用Android为。你仍然需要申请认定和计算分数概率方法,这是不是针对Android作业(至少不是现在)。

此外,在MS SQL服务器哈罗温克勒串距离包裹成CLR功能性能要好得多,因为SQL Server不supprt一阳本身和许多的处理是围绕阵列。因此,在T-SQL执行添加了过多的开销,但SQL-CLR工作速度极快。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top