J'utilise Compass/Lucene pour rechercher et indexer ma base de données. Je souhaite que les signes diacritiques et les caractères soient ignorés lorsque je recherche, de sorte que la requête "foo" corresponde à la fois à "Fóo" et à "foo" et une requête à "fóó" correspond à "fóo" et "fOO". D'après ce que j'ai lu, il semble que j'ai besoin de changer l'analyseur par défaut que Compass utilise à la fois lors de l'indexation et de la recherche dans mon contexte. J'ai découvert où je spécifie l'analyseur à utiliser, mais je n'arrive pas à trouver une implémentation d'analyseur qui réponde à mes exigences. Existe-t-il déjà un analyseur qui ignore les signes diacritiques et les caractères, ou dois-je écrire le mien?ignorer les signes diacritiques lors de la recherche
Répondre
Jetez un oeil à org.apache.lucene.analysis.ASCIIFoldingFilter pour voir si elle fait ce que vous voulez. Sinon, j'utiliserais sa source comme point de départ pour écrire le vôtre.
Vous avez raison que vous devez utiliser la même configuration de l'analyseur pour l'indexation et l'interrogation, pour la raison évidente que si vous avez dépouillé tous les diacritiques de l'index, vous devez les dépouiller de toute requête aussi.
Une chose à prendre en compte est de vous assurer de normaliser tout unicode quelque part dans le processus d'indexation/interrogation. Pour plus d'informations, voir: http://unicode.org/reports/tr15/, http://unicode.org/faq/normalization.html et http://docs.oracle.com/javase/6/docs/api/java/text/Normalizer.html. EDIT: Comme mentionné dans les commentaires ci-dessous, en tant que filtre, vous ne pouvez pas utiliser ASCIIFoldingFilter en tant qu'analyseur directement, mais il existe des instructions simples pour l'inclure dans un analyseur ici: stackoverflow.com/a/3834244/ 390153
EDIT: Comme mentionné par @jspboix dans le commentaire ci-dessous, vous devrez également chaîner LowerCaseFilter pour gérer le cas de caractères.
Dans mon application Grails, j'utiliser le plug-in interrogeable et juste configuré le système pour utiliser l'analyseur « allemand »:
compassSettings = ['compass.engine.analyzer.default.type': 'German']
Cela ne tient pas au moins le cas et trémas - « A » est stocké sous forme de " un "dans l'index.
Je viens d'ajouter "Fóo" et "Föo" à l'un de mes documents de test et j'ai cherché "foo" - il trouve "Föo" mais pas "Fóo". Donc je suppose que si vous changez la langue à la bonne valeur (français?) Ça devrait marcher.
- 1. Oracle: recherche de signes diacritiques
- 2. RAILS3: Recherche ignorant les signes diacritiques?
- 3. Signes diacritiques
- 4. sql recherche sur les champs contenant des signes diacritiques
- 5. Les signes diacritiques de rendu HTML5
- 6. Exécuter la chaîne comaparison en ignorant les signes diacritiques
- 7. Remplacer les signes diacritiques en Javascript
- 8. Signes diacritiques croates MySQL DB-like clause
- 9. Comment ignorer les signes diacritiques avec une regex sous Android 2.2?
- 10. ZipInputStream lève l'exception Illegalargument pour les signes diacritiques
- 11. signes diacritiques dans l'URL AFNetworking GET
- 12. SOLR ignorer la virgule et autres signes de ponctuation lors de la recherche
- 13. Titre Cas en JavaScript pour les signes diacritiques (non-ASCII)
- 14. Remplacer les caractères pour faire des lettres internationales (signes diacritiques)
- 15. Comment translittérer correctement cyrillique, sans signes diacritiques, en utilisant CFStringTransform?
- 16. Regex mot-break avec des signes diacritiques Unicode
- 17. Comment convertir en "combinaison de signes diacritiques" sur iOS
- 18. Retirer diacritiques de chaîne en Java
- 19. Quelle est la meilleure façon d'enlever des signes de ponctuation, des symboles, des signes diacritiques, des caractères spéciaux?
- 20. Comment puis-je supprimer les signes diacritiques d'une chaîne dans la dynamique ax
- 21. Sqlite3 insensible aux diacritiques iphone de recherche
- 22. Script pour remplacer les lettres avec les signes diacritiques Á, É, Í, ... par A, E, I,
- 23. Wordpress - Les liens avec les signes diacritiques ne se chargent pas dans Safari (Windows/MacOS/iPhone)
- 24. Google Maps ne montre pas tous les signes diacritiques sur les carreaux
- 25. Comment faire correspondre les signes diacritiques avec les expressions régulières dans TSQL
- 26. Comment puis-je ignorer le caractère Unicode lors de la recherche?
- 27. Python regex \ w ne correspond pas à la combinaison de signes diacritiques?
- 28. ignorer incompatibles /libSDL.a lors de la recherche de -lSDL
- 29. Comment encoder des signes diacritiques pour les mises à jour Twitter?
- 30. RegEx: diviser une chaîne par une autre chaîne, y compris les signes diacritiques
Je ne pense pas que org.apache.lucene.analysis.ASCIIFoldingFilter résoudra mon problème directement, parce que ce n'est pas un analyseur, mais pourrait être un point de départ utile –
Non, pas directement car c'est un filtre. Cependant, vous trouverez un court exemple de la façon de l'incorporer dans un analyseur ici: http://stackoverflow.com/a/3834244/390153 – Recurse
Vous aurez également besoin de LoweCaseFilter pour matchin "fOO" avec "foo". – jspboix