Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 使用Jaro-Winkler距离算法进行排序?_Android_Sqlite_Sql Order By_Jaro Winkler - Fatal编程技术网

Android 使用Jaro-Winkler距离算法进行排序?

Android 使用Jaro-Winkler距离算法进行排序?,android,sqlite,sql-order-by,jaro-winkler,Android,Sqlite,Sql Order By,Jaro Winkler,我想知道如何才能以这种方式运行SQLite order by select * from contacts order by jarowinkler(contacts.name,'john smith'); 我知道Android在用户定义的功能方面有一个瓶颈,我有其他选择吗?步骤1:查询减去ORDER BY部分 第2步:创建一个光标包装器,包装您的光标,计算每个位置的Jaro-Winkler距离,对位置进行排序,然后在覆盖所有需要位置的方法时使用排序后的位置(例如,moveToPosition

我想知道如何才能以这种方式运行SQLite order by

select * from contacts order by jarowinkler(contacts.name,'john smith');
我知道Android在用户定义的功能方面有一个瓶颈,我有其他选择吗?

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


第2步:创建一个
光标包装器
,包装您的
光标
,计算每个位置的Jaro-Winkler距离,对位置进行排序,然后在覆盖所有需要位置的方法时使用排序后的位置(例如,
moveToPosition()
moveToNext()
).

预先计算字符串长度并将其添加到单独的列中。然后按该长度对整个表进行排序。添加索引(如果可以的话)。然后添加额外的过滤器,例如,您不想将“Srivastava Brahmaputra”与“John Smith”进行比较。长度太长了,所以将这种长度比较作为总长度的百分比排除在外。因此,如果你的单词是10个字符,那么只将其与10+-2或10+-3个字符的单词进行比较

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

通常在10万个词条的词汇库中,这样的过滤器将比较的数量减少到大约300个。除非你正在做一个完整的记录链接,然后我想知道为什么要用Android来做这个。你仍然需要应用概率方法来计算分数,这不是Android的工作(至少现在不是)


此外,在MS SQL Server中,包装到CLR函数中的Jaro Winkler字符串距离性能要好得多,因为SQL Server本身不支持arays,而且大部分处理都是围绕数组进行的。所以T-SQL中的实现增加了太多的开销,但SQL-CLR的工作速度非常快

我正在用Java做类似的事情,但是在计算N x M步数时需要花费大量时间,脚本运行2-3分钟,运行300 x 500。我不清楚“N x M步数”是从哪里来的。如果用Java计算太慢,请使用NDK。我正在处理一个person sync数据库,一端有N条记录,另一端有M条记录,我对它们的名称运行jaro-winkler距离算法以匹配最佳记录。