Question

Je me demande comment pourrais-je être en mesure d'exécuter un ordre SQLite de cette manière

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

Je sais que Android a un goulot d'étranglement avec des fonctions définies par l'utilisateur, dois-je une alternative?

Était-ce utile?

La solution

Étape 1: Faites la requête moins la partie ORDER BY

Étape 2: Créer un CursorWrapper qui enveloppe votre Cursor, calcule la distance Jaro-Winkler pour chaque poste, trie les positions, utilise alors les positions triées lors de la substitution de toutes les méthodes qui nécessitent une position (par exemple, moveToPosition(), moveToNext()).

Autres conseils

longueurs de chaîne Pre calculer et les ajouter dans la colonne séparée. Puis trier la table par entired que cette longueur. Ajouter des index (si vous le pouvez). Ensuite, ajouter des filtres supplémentaires par exemple, vous ne voulez pas comparer « Srivastava Brahmapoutre » à « John Smith ». La longueur est de Wack par trop pour exclure ce genre de comparaison par la longueur en pourcentage de la longueur totale. Donc, si votre mot est de 10 caractères comparer seulement aux mots avec 10 + -2 ou -3 10 + caractères.

De cette façon, vous permettra de réduire considérablement le nombre de fois cet algorithme a besoin pour fonctionner.

En règle générale dans le vocalbulary de 100 000 entrées de ces filtres réduisent le nombre de comparaisons à environ 300. À moins que vous faites un lien d'enregistrement complet, puis soufflée je me demande pourquoi utiliser Android pour cela. Vous auriez encore besoin d'appliquer des méthodes probabilistes pour cela et les scores calculate et ce n'est pas un emploi pour Android (au moins pas pour l'instant).

Aussi à distance de chaîne MS SQL Server Jaro Winkler enveloppé dans la fonction CLR sont beaucoup plus performantes, car SQL Server ne supprt Arays en mode natif et une grande partie du traitement est autour des réseaux. Ainsi, la mise en œuvre en T-SQL ajouter trop de frais généraux, mais fonctionne SQL CLR extrêmement rapide.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top